2015-06-01 8 views
16

Ich habe ein SearchView in meinen ActionBar, und ich mag die ganzen ActionBar verwenden, wenn das Suchsymbol gedrückt wird, aber ich kann nur den ActionBar freien Speicherplatz verwendeSuche erweitern gesamte Aktionsleiste zu verwenden (andere Dinge verbergen)

zB .: http://imgur.com/wnjMfWO

mein Menü Code:

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

Ich hatte versucht android:showAsAction="ifRoom", aber ich brauche sie immer auf meinem ActionBar, und nicht in meinem Menü.

EDIT ------

Dank @Simas,

I setOnActionExpandListener Methode verwendet, um diesen Effekt zu erzielen

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

Antwort

39

Nun könnte man das selbst imitieren, indem alle versteckt die andere Artikel, wenn der SearchView erweitert wird:

@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

dies half mir eine Lösung – user3672263

+9

searchView.setOnCloseListener nicht so zu erreichen, arbeiten verwenden MenuItemCompat.setOnActionExpandListener (searchItem, neue MenuItemCompat.OnActionExpandListener() .... – Sumit

+0

Sehr gut .Thanks –

2

Thi s wäre eine späte Antwort, aber Sie könnten dieses Attribut zu Ihrem Menüpunkt hinzufügen und die Arbeit ist für Sie erledigt.

app:showAsAction="collapseActionView|always" 

Hier ist das Schlüsselwort collapseActionView.

+0

das scheint nicht für mich zu arbeiten, funktioniert nur für den Suchbegriff, der die Actionview – Zharf

0

Ich habe diese Codezeile ausprobiert, damit die Suchansicht die gesamte verfügbare Breite erweitert. Dies funktioniert, wenn andere Elemente in der Aktionsleiste angezeigt werden.

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

hat nicht funktioniert für mich – rgoncalv

+1

Es funktioniert für mich –

Verwandte Themen