android - revisar - examen de la vista online
Evento cuando la vista de búsqueda se expande desde la vista iconificada (3)
Qué evento (s) debo escuchar para determinar cuándo el usuario hace clic en SearchView iconificado. Quiero quitar algunos elementos (pestañas de navegación de ActionBar, si es importante) de la barra de acciones para hacer más espacio en la orientación vertical.
Probé OnClickListener, OnFocusChangeListener, OnTouchListener y otros eventos, pero ninguna de las dos se desencadena por la expansión de SearchView.
Desde API Nivel 14 tienes un oyente dedicado: 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
}
});
}
Encontré una forma de obtener ese evento usando 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);
}
}
};
Si está utilizando 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;
}
});