2016-04-28 16 views
13

enter image description hereWie verschiebe ich SearchViews Suchsymbol auf die rechte Seite?

Hier ist mein Layout, mit android.support.v7.widget.SearchView. Ich möchte das Suchsymbol auf der rechten Seite bewegen, aber ich habe keine Methode ... `

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways|snap" 
     app:popupTheme="@style/AppTheme.PopupOverlay"> 

     <android.support.v7.widget.SearchView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </android.support.v7.widget.Toolbar> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_main_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</android.support.design.widget.AppBarLayout> 

`

, nachdem ich auf das Symbol gefunden wird, wird es zu diesem Layout ändern enter image description here

Antwort

15

Sie können es

SearchView search = (SearchView) item.getActionView(); 
    search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); 
+0

thx! Es funktioniert perfekt, und es wird nicht meinen Titel abdecken! – meunicorn

7
<android.support.design.widget.AppBarLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:theme="@style/AppTheme.AppBarOverlay"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:layout_scrollFlags="scroll|enterAlways|snap" 
    app:popupTheme="@style/AppTheme.PopupOverlay"> 

    <RelativeLayout 
     android:id="@+id/not" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
         > 
    <android.support.v7.widget.SearchView 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 
</android.support.v7.widget.Toolbar> 

<android.support.design.widget.TabLayout 
    android:id="@+id/tab_main_title" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
</android.support.design.widget.AppBarLayout> 
+0

danke! es funktioniert sehr gut ! – meunicorn

1

Versuchen Sie, diese ... Es sieht aus, als Sie diese Zeile innerhalb der Suche Tag hinzufügen expect.Just.

android: Schwerkraft = "right"

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:layout_scrollFlags="scroll|enterAlways|snap" 
    app:popupTheme="@style/AppTheme.PopupOverlay"> 

    <android.support.v7.widget.SearchView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="right" /> 
</android.support.v7.widget.Toolbar> 

<android.support.design.widget.TabLayout 
    android:id="@+id/tab_main_title" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

+3

danke für deine Antwort, aber es funktioniert nicht – meunicorn

+0

Poste deinen vollständigen Code. Weil ich Ihre Schnipsel getestet habe. Es hat funktioniert. –

9

programmatisch tun können Sie Suchaktion in menu.xml hinzufügen wie unten:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <item 
     android:id="@+id/action_search" 
     android:icon="@mipmap/ic_search_white_24dp" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="ifRoom|collapseActionView" /> 
    <item android:id="@+id/action_download" 
     android:title="@string/menu_action_download" 
     android:icon="@mipmap/ic_file_download_white_24dp" 
     android:orderInCategory="100" 
     app:showAsAction="always" /> 
</menu> 

Normal look Collapsed look

0

Falls Sie SearchView außerhalb von ActionBar in jeder anderen Ansicht verwenden möchten (lassen Sie uns zum Beispiel sagen ConstraintLayout) können Sie den Ansatz auf this Website veröffentlicht nutzen können. Grundsätzlich ist das Symbol in einem ImageView positioniert am Anfang des Layouts (oder ich könnte sagen "es ist das erste Element, das zu seinem Elternteil") hinzugefügt wird. Mit diesem Code suchen Sie danach, entfernen es dann vom übergeordneten Element und fügen es schließlich zurück. Das Ergebnis: Es wird am "Ende" des SearchView Widget ... Problem gelöst positioniert werden ...

//Get ImageView of icon 
ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 

//Get parent of gathered icon 
ViewGroup linearLayoutSearchView = (ViewGroup) searchViewIcon.getParent(); 
//Remove it from the left... 
linearLayoutSearchView.removeView(searchViewIcon); 
//then put it back (to the right by default) 
linearLayoutSearchView.addView(searchViewIcon); 

getestet, arbeiten, zufrieden ...;)

0

Einstellen der SearchView Schwerkraft das Recht durch XML oder programmatisch funktioniert, aber wenn das SearchView erweitert wurde, dann nahm es einen kleinen Bereich der Breite auf der rechten Seite, die nicht das beabsichtigte Aussehen war, das ich im Sinn hatte, ich wollte, dass es die volle Breite nimmt.

Hinweis 1: Mit dieser Lösung konnte der Titel nicht angezeigt werden. Daher habe ich einen TextView hinzugefügt, um den Titel zu halten.

Anmerkung 2: Wenn die SearchView erweitert wurde, ist es auf dem benutzerdefinierten Titel überlappen würde, so machte ich den SearchView Hintergrund als Toolbar Versteck zu vermeiden, halten/den Titel mit SearchView zeigt ‚s erweitern/Einsturz

Hier ist der Toolbar Code:

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" > 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize"> 

      <TextView 
       android:id="@+id/toolbar_title" 
       style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:gravity="center_vertical" 
       android:text="Toolbar Title" 
       android:textColor="@android:color/white" /> 

      <android.support.v7.widget.SearchView 
       android:id="@+id/search_view" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_centerVertical="true" 
       android:background="?attr/colorPrimary" 
       android:gravity="right" /> 
     </RelativeLayout> 
    </android.support.v7.widget.Toolbar> 

Innerhalb der Aktivität, verwendete ich die Schließen und SearchClick Zuhörer die SearchView nach links auszurichten.

mSearchView = findViewById(R.id.search_view); 

    mSearchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) mSearchView.getLayoutParams(); 
      param.removeRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      //set layout params to cause layout update 
      mSearchView.setLayoutParams(param); 
      return false; 
     } 
    }); 
    mSearchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) mSearchView.getLayoutParams(); 
      param.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      //set layout params to cause layout update 
      mSearchView.setLayoutParams(param); 
     } 
    }); 
Verwandte Themen