2015-06-01 6 views
16

Mam SearchView wewnątrz mojego ActionBar i chcę użyć całą ActionBar po naciśnięciu ikony wyszukiwania, ale mogę używać tylko ActionBar wolnego miejscaRozwiń Szukaj Zobacz korzystać cała akcja bar (ukryć inne rzeczy)

np .: http://imgur.com/wnjMfWO

mój kod menu:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context="br.com.moderna.houaiss.activity.SearchActivity" > 

<item 
    android:id="@+id/search" 
    android:actionViewClass="android.widget.SearchView" 
    android:icon="@drawable/ic_search_white_48dp" 
    android:showAsAction="collapseActionView|always" 
    android:title="@string/search"/> 
<item 
    android:id="@+id/backWardHistory" 
    android:icon="@drawable/ic_arrow_back_white_48dp" 
    android:showAsAction="always" 
    android:title="@string/back_history"/> 
<item 
    android:id="@+id/forWardHistory" 
    android:icon="@drawable/ic_arrow_forward_white_48dp" 
    android:showAsAction="always" 
    android:title="@string/forward_history"/> 
<item 
    android:id="@+id/action_home" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_home"/> 
<item 
    android:id="@+id/action_about" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_about"/> 
<item 
    android:id="@+id/action_configuration" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_configuration"/> 
<item 
    android:id="@+id/action_logout" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_logout"/> 

Próbowałem już android:showAsAction="ifRoom", ale potrzebuję, aby zawsze były na moim ActionBar, a nie w moim menu.

EDIT ------

Dzięki @Simas,

użyłem metody setOnActionExpandListener aby osiągnąć ten efekt

final MenuItem searchItem = menu.findItem(R.id.search); 

    searchItem.setOnActionExpandListener(new OnActionExpandListener() { 

     @Override 
     public boolean onMenuItemActionExpand(final MenuItem item) { 
      SearchActivity.this.setItemsVisibility(menu, searchItem, false); 
      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(final MenuItem item) { 
      SearchActivity.this.setItemsVisibility(menu, searchItem, true); 
      return true; 
     } 
    }); 


private void setItemsVisibility(final Menu menu, final MenuItem exception, 
     final boolean visible) { 
    for (int i = 0; i < menu.size(); ++i) { 
     MenuItem item = menu.getItem(i); 
     if (item != exception) 
      item.setVisible(visible); 
    } 
} 

Odpowiedz

39

Cóż można naśladować że samemu ukrywając wszystkie inne elementy po rozwinięciu SearchView:

@Override 
public boolean onCreateOptionsMenu(final Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    final MenuItem searchItem = menu.findItem(R.id.search); 
    SearchView searchView = (android.widget.SearchView) searchItem.getActionView(); 

    // Detect SearchView icon clicks 
    searchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setItemsVisibility(menu, searchItem, false); 
     } 
    }); 
    // Detect SearchView close 
    searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      setItemsVisibility(menu, searchItem, true); 
      return false; 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 
} 

private void setItemsVisibility(Menu menu, MenuItem exception, boolean visible) { 
    for (int i=0; i<menu.size(); ++i) { 
     MenuItem item = menu.getItem(i); 
     if (item != exception) item.setVisible(visible); 
    } 
} 
+0

to pomogło mi osiągnąć rozwiązanie – user3672263

+9

searchView.setOnCloseListener nie działa więc używać MenuItemCompat.setOnActionExpandListener (searchItem, Nowy MenuItemCompat.OnActionExpandListener() .... – Sumit

+0

Bardzo dobrze zdefiniowane .thanks –

2

Thi s to spóźniona odpowiedź, ale możesz dodać ten atrybut do pozycji menu, a praca zostanie wykonana za ciebie.

app:showAsAction="collapseActionView|always" 

Słowo kluczowe tutaj jest collapseActionView.

+0

to nie działa dla mnie, działa tylko dla elementu wyszukiwania, który ma widok akcji – Zharf

0

Próbowałem tego wiersza kodu, aby widok wyszukiwania rozwinąć pełną dostępną szerokość. Działa to, gdy na pasku akcji znajdują się również inne elementy.

searchView.setMaxWidth(android.R.attr.width); 
+0

nie działa dla mnie – rgoncalv

+1

To działa dla mnie –