2016-04-28 28 views
13

enter image description hereJak przenieść wyszukiwanie SearchView Ikona po prawej stronie?

Oto mój układ, używając android.support.v7.widget.SearchView. Chcę przenieść ikonę wyszukiwarki po prawej stronie, ale nie znalazłem żadnej metody ... `

<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> 

`

po kliknięciu na ikonę, zmieni się tego układu enter image description here

Odpowiedz

15

można to zrobić programowo

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

thx! Działa idealnie i nie obejmuje mojego tytułu! – 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

dziękuję! pracuje bardzo dobrze ! – meunicorn

1

Spróbuj tego ... to wygląda jak expect.Just dodać tę linię wewnątrz SearchView Tag.

android: grawitacja = "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

dziękuję za odpowiedź, ale to nie działa – meunicorn

+0

Prześlij swój pełny kod. Ponieważ przetestowałem twoje fragmenty. To zadziałało. –

9

Możesz dodać Akcja Szukaj w menu.xml jak poniżej:

<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

W przypadku, gdy chcesz użyć SearchView poza ActionBar w każdym innym widoku (powiedzmy na przykład ConstraintLayout) można użyć podejście zamieszczonych na this miejscu. Zasadniczo ikona znajduje się na początku układu (lub mogę powiedzieć, "jest to pierwszy element dodany do elementu nadrzędnego"). Za pomocą tego kodu wyszukujesz go, a następnie usuwasz z rodzica, a na koniec odkładasz. Wynik: zostanie ona umieszczona na "koniec" w SearchView widget ... problem rozwiązany ...

//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); 

Przetestowane, pracy, spełnione ...;)

0

Ustawianie SearchView ciężkości prawo przez xml lub programowo działa, ale kiedy SearchView został rozszerzony, to zabierał mały obszar o szerokości po prawej stronie, co nie było zamierzonym wyglądem, jaki miałem na myśli, chciałem, aby zajęło całą szerokość.

Uwaga 1: to rozwiązanie nie pozwoliło na wyświetlenie tytułu, więc dodałem numer TextView, aby zachować tytuł.

Uwaga 2: Gdy SearchView została rozszerzona, że ​​to nakładają się na tytuł niestandardowego tak zrobiłem tło SearchView jako Toolbar, aby uniknąć ukrywać/wykazujące tytuł z SearchView „s rozwinąć/zwinąć

Tutaj jest to kod Toolbar:

<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> 

Wewnątrz aktywności, użyłem blisko i SearchClick słuchaczy, aby wyrównać SearchView w lewo.

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); 
     } 
    });