2013-04-07 9 views
6

Wenn Sie die Suchleiste für die Aktionsleiste verwenden, wird das Widget im Hochformat auf die volle Breite des Bildschirms erweitert, bleibt jedoch im Querformat kurz stehen.ActionBar SearchView wird im Querformat nicht vollständig erweitert

Gibt es eine Möglichkeit, die Erweiterungslayout-Parameter im SearchView so einzustellen, dass die Aktionsleiste vollständig ausgefüllt wird, wenn der Benutzer eine Suche eingibt?

Siehe Bild: http://i.imgur.com/3z8ZbJA.png

Hinweis: Ich verwende derzeit nicht ActionBar Sherlock

Edit: Hier ist, was ich tat, um es zu bekommen, die volle Breite zu erweitern.

searchView.setOnSearchClickListener(new OnClickListener() { 
    private boolean extended = false; 

    @Override 
    public void onClick(View v) { 
     if (!extended) { 
      extended = true; 
      LayoutParams lp = v.getLayoutParams(); 
      lp.width = LayoutParams.MATCH_PARENT; 
     } 
    } 

}); 

Antwort

4

Haben Sie so etwas versucht?

+0

schließen. Ich musste 'setOnSearchClickListener()' verwenden, da ich keine Hardware-Taste drücken wollte. –

0

Ich habe eine Lösung gefunden, um die Suchansicht in Querformat vollständig zu erweitern und die Aktionsansicht bereits erweitert zu haben, wenn die Aktivität erstellt wird. So funktioniert es:

1.Erstellen Sie zuerst eine XML-Datei in Ihrem Res-Menü-Ordner, zum Beispiel: searchview_in_menu.xml. Hier würden Sie den folgenden Code haben:

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:id="@+id/action_search" 
       android:title="@string/search" 
       android:icon="@android:drawable/ic_menu_search" 
       android:actionLayout="@layout/searchview_layout" /> 
    </menu> 

Hinweis: "@ String/search" - ungefähr so ​​aussieht in der res-strings.xml:

<string name="search">Search</string> 

2.Zweite erstellen das Layout bezeichnet oben ("@ layout/searchview_layout") im Ordner res-layout. Das neue Layout: searchview_layout.xml wird wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?> 
    <SearchView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/search_view_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

Hinweis: Hier werden wir die Suche Ansichtsbreite Einstellen der Breite des übergeordneten übereinstimmen (android: layout_width = "match_parent")

3 .In Ihre MainActivity Klasse oder in der Aktivität, die die Suche Schreib im onCreateOptionsMenu() -Methode den folgenden Code zu implementieren hat:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.searchview_in_menu, menu); 
     //find the search view item and inflate it in the menu layout 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     mSearchView = (SearchView) searchItem.getActionView(); 
     //set a hint on the search view (optional) 
     mSearchView.setQueryHint(getString(R.string.search)); 
     //these flags together with the search view layout expand the search view in the landscape mode 
     searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
       | MenuItem.SHOW_AS_ACTION_ALWAYS); 
     //expand the search view when entering the activity(optional) 
     searchItem.expandActionView(); 
     return true; 
} 
0

Passen Sie die Breite Layout param zu MATCH_PARENT, auf diese Weise die SearchView vollständig expandiert in entweder Hoch- oder Quer

ViewGroup.LayoutParams layoutParams = mSearchView.getLayoutParams(); 
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 
0

Für ActionBarCompat verwenden:

MenuItemCompat.setShowAsAction(searchItem, MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
      | MenuItem.SHOW_AS_ACTION_ALWAYS); 
    MenuItemCompat.expandActionView(searchItem); 
+0

Wie glatt ist das in der ActionBar zu erreichen? – Darklex

0

verwenden (100%):

mSearchView = (SearchView) searchItem.getActionView();  
mSearchView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
12

MenuItemCompat der Suche hat eine Eigenschaft namens maxWidth.

final MenuItem searchItem = menu.findItem(R.id.action_search); 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    searchView.setMaxWidth(xxx); 

Verwendung Bildschirmbreite statt xxx offcourse

+6

searchView.setMaxWidth (Integer.MAX_VALUE); –