2011-11-05 8 views
8

Quali eventi dovrei ascoltare per determinare quando l'utente fa clic su iconified SearchView. Voglio rimuovere alcuni elementi (le schede di navigazione di ActionBar, se questo è importante) dalla barra delle azioni per fare più spazio con l'orientamento verticale.Evento quando searchview si espande dalla vista iconificata

Ho provato OnClickListener, OnFocusChangeListener, OnTouchListener e altri eventi ma nessuno dei due viene attivato dall'espansione SearchView.

risposta

20

Dal livello di API 14 Avete un ascoltatore dedicato: http://developer.android.com/guide/topics/ui/actionbar.html

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.options, menu); 
     MenuItem menuItem = menu.findItem(R.id.actionItem); 
     ... 

    menuItem.setOnActionExpandListener(new OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      // Do something when collapsed 
      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 
     } 
    }); 
} 
+1

Come sempre, è possibile utilizzare ** ActionBarSherlock ** ('com.actionbarsherlock.view.MenuItem') per compatibilità con le versioni precedenti –

+3

E se si utilizza AppCompat, c'è" MenuItemCompat.setOnActionExpandListener ". –

13

Ho trovato un modo per ottenere tale evento utilizzando addOnLayoutChangeListener

private final OnLayoutChangeListener _searchExpandHandler = new OnLayoutChangeListener() 
    { 
    @Override 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, 
      int oldBottom) 
     { 
     SearchView searchView = (SearchView)v; 
     if (searchView.isIconfiedByDefault() && !searchView.isIconified()) 
      { 
      // search got expanded from icon to search box, hide tabs to make space 
      getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
      } 
     } 
    }; 
+0

Perfetto! (anche se potresti voler usare il passato in 'v' invece di' _searchView') ... Non ho trovato questo metodo perché il metodo inizia con 'add' invece di' set' come per gli altri listener. –

+0

richiedono API livello 11, desidero utilizzarlo nel livello 8. per favore aiuto – vuhung3990

+0

Inoltre può implementare in searchView.addOnLayoutChangeListener(); – Maga

5

Se stai usando MenuItemCompat:

MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 
     Log.d("TAG", "Collapsed"); 

     return true; 
    } 

    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 
     Log.d("TAG", "Expanded"); 

     return true; 
    } 
}); 
Problemi correlati