2013-04-07 14 views
6

Podczas korzystania z paska wyszukiwania paska czynności, widget rozwija się, aby zajmować całą szerokość ekranu w trybie portretu, ale zatrzymuje się w trybie poziomym.ActionBar SearchView nie w pełni rozwija się w trybie poziomym

Czy istnieje sposób na ustawienie parametrów rozkładu w SearchView, aby w pełni wypełnić pasek akcji, gdy użytkownik wpisuje wyszukiwanie?

Zobacz obraz: http://i.imgur.com/3z8ZbJA.png

Uwaga: Nie jestem obecnie za pomocą ActionBar Sherlock

Edit: Oto co zrobiłem, aby ją rozszerzyć na całą szerokość.

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

}); 

Odpowiedz

4

Czy próbowałeś czegoś takiego?

editView.setOnKeyListener(new OnKeyListener() { 
    private boolean extended = false; 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (!extended && event.getAction() == KeyEvent.ACTION_DOWN) { 
      extended = true; 
      LayoutParams lp = v.getLayoutParams(); 
      lp.width = LayoutParams.MATCH_PARENT; 
     } 

     return false; 
    } 

}); 
+0

Close. Zlikwidowałem potrzebę użycia 'setOnSearchClickListener()', ponieważ nie będę szukał wyszukiwania za pomocą klucza sprzętowego. –

0

Udało mi się znaleźć rozwiązanie umożliwiające pełne rozwinięcie widoku wyszukiwania w widoku poziomym oraz rozszerzenie widoku akcji już po utworzeniu działania. Oto, jak to działa:

1. Najpierw utwórz plik xml w folderze res-menu, na przykład: searchview_in_menu.xml. Tutaj można mieć następujący kod:

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

Uwaga: "@ ciąg/search" - wygląda coś takiego w RES-strings.xml:

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

2.Second stworzyć układ, o którym mowa powyżej ("@ layout/searchview_layout") w folderze res-layout. Nowy układ: searchview_layout.xml będzie wyglądać następująco:

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

Uwaga: Tu ustawiasz szerokość widoku wyszukiwania, aby dopasować szerokość jego rodzica (Android: layout_width = „match_parent”)

3 .W klasie główną działalność lub czynności, które musi realizować Szukaj Zobacz zapis w onCreateOptionsMenu() metoda następujący kod:

@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

Dostosuj szerokość układu param do MATCH_PARENT, że sposób SearchView będzie w pełni rozwijać się w zarówno portret lub krajobraz

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

Dla ActionBarCompat użyj:

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

Jak płynnie to osiągnąć w ActionBar? – Darklex

0

Użyj tego (100%):

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

MenuItemCompat za SearchView ma właściwość o nazwie maxwidth.

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

szerokość ekranu użycie zamiast xxx offcourse

+6

searchView.setMaxWidth (Integer.MAX_VALUE); –

Powiązane problemy