2014-06-09 7 views
25

Mam SearchView w górnej części układu (nie na pasku akcji), czy mimo to wymuszam, aby ta View była zawsze rozwijana (otwierana)?Jak uczynić SearchView zawsze rozszerzonym w Androidzie?

Jeśli nie, chciałbym umieścić w pobliżu fantazyjny obraz, czy mimo to należy ukryć ten obraz po rozwinięciu (kliknięciu/rozwinięciu)? SearchView?

Odpowiedz

60

Możesz użyć właściwości android:iconifiedByDefault="false" na XML lub ustawić programowo setIconifiedByDefault(false). Zgodnie z dokumentacją ta właściwość ustawiła SearchView rozszerzoną tak, jak chcesz.

Spójrz na SearchView.setIconifiedByDefault(boolean iconified)

+9

'app: iconifiedByDefault = "false"' w przypadku użycia support.widget. – Bawa

15
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
searchItem.expandActionView(); 

w pliku menu, użyj

showAsAction="ifRoom|collapseActionView" 

Jeżeli którykolwiek zapytań, prosimy o komentarz.

1

robie to na fragmencie i zrobił to za pomocą

searchItem.expandActionView(); 

ale gdy użytkownik naciśnie przycisk Wstecz zapaść więc w sposób zwinięcia użyłem

getActivity().getSupportFragmentManager().popBackStack(); 
// when it collapsed i am going back 

Poniżej jest moje rozwiązanie w szczegóły:

search_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item android:id="@+id/search_contacts" 
     android:title="search" 
     android:icon="@drawable/search2" 
     app:showAsAction="ifRoom|collapseActionView" 
     app:actionViewClass="android.support.v7.widget.SearchView" > 
    </item> 
</menu> 

w fragmencie użyłem poniżej kodu:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.search_menu, menu); 

     // Define the listener 
     MenuItemCompat.OnActionExpandListener expandListener = new MenuItemCompat.OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) 
      { 
       getActivity().getSupportFragmentManager().popBackStack(); 
       // Do something when action item collapses 
       return true; // Return true to collapse action view 
      } 

      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) 
      { 

       // Do something when expanded 
       return true; // Return true to expand action view 
      } 
     }; 



     MenuItem searchItem = menu.findItem(R.id.search_contacts); 


     // Assign the listener to that action item 
     MenuItemCompat.setOnActionExpandListener(searchItem, expandListener); 

     // Any other things you have to do when creating the options menu… 



     SearchView searchView = 
       (SearchView) MenuItemCompat.getActionView(searchItem); 
     //searchView.setIconifiedByDefault(false); 
     searchItem.expandActionView(); // when fragment opens it expanded auto 


     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) 
      { 
       seachViewFunction(newText); // in searchViewFunction(newText); i am doing my things 
       return false; 
      } 
     }); 

     super.onCreateOptionsMenu(menu, inflater); 
    }