Android: menuItem.expandActionView () en el nivel API <14

Estoy implementando una interfaz de búsqueda en mi aplicación usando el widget de búsqueda. No pienso apoyar ningún nivel de API <11 (Honeycomb). En la actividad de búsqueda, me gustaría anular onKeyDown() para expandir el widget de búsqueda cuando el usuario presiona la tecla de búsqueda y minimizarla cuando se envía el texto de la consulta.

Esto se logra fácilmente llamando a:

 @Override public boolean onSearchRequested() { if (mSearchMenuItem != null) { mSearchMenuItem.expandActionView(); } return false; } 

y cuando se envía la consulta:

 searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { //Do nothing, results for the string supplied are already shown. //Just collapse search widget mSearchMenu.collapseActionView(); return false; } @Override public boolean onQueryTextChange(String newText) { //do other stuff return false; }); 

El problema es que tanto el colapso como la expansión se introdujeron en el nivel 14 de la API. Como se mencionó anteriormente, quiero proporcionar soporte desde el nivel 11 de la API y tengo problemas para lograr la misma funcionalidad sin llamar a los nuevos métodos API.

Lo intenté:

 @Override public boolean onSearchRequested() { searchView.setIconifiedByDefault(false); //and also called searchView.requestFocusFromTouch(); } 

pero que simplemente no hacer nada en absoluto (por algo que me refiero a la searchwidget sigue colapsado si ya lo era.

Desde que estoy manteniendo la referencia al menuItem, también intenté:

 @Override public boolean onSearchRequested() { SearchActivity.this.onOptionsItemSelected(mSearchMenuItem); } 

pero eso no hizo nada en absoluto, lo último que intenté fue:

 @Override public boolean onSearchRequested() { searchMenu.getActionView().performClick(); return false; } 

Pero eso no es ir también.

¿Alguna idea sobre lo que podría hacer para proporcionar la misma funcionalidad que menuItem.collapseActionView() y menuItem.expandActionView() sin tener que sacrificar la compatibilidad?

Siempre tiene la opción de diferenciar su solución en función de la versión actual en ejecución:

 int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { // pre honeycomb } else { // honeycomb and post } 

Sé que esto puede no ser exactamente lo que estás buscando, pero puede que te lleve un poco del camino.

Esto funciona en el nivel 10 de la API para expandir ActionView, por ejemplo, SearchView

 MenuItemCompat.expandActionView(mSearchMenuItem); 

Puede utilizar métodos estáticos de MenuItemCompat. Ejemplo:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); MenuItem menuItem = menu.findItem(R.id.action_search); MenuItemCompat.expandActionView(menuItem); SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem); ... } 

Más información: http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html

  • Agregar dinámicamente elemento de acción en la barra de acción
  • Dos elementos del menú Spinner en el ancho de ActionBar
  • ActionBarsherlock cómo establecer divisores en elementos de menú con sólo iconos
  • No puedo establecer un elemento de submenú como seleccionado
  • IllegalArgumentException Tipo de elemento de carga útil no válido - Con ActionBarCompat
  • Android: Obtener una vista Referencia a un elemento de menú
  • ¿Cómo agregar un único elemento de menú a la barra de herramientas de android?
  • Cómo cambiar de forma programática el color de fondo de los elementos de la barra de acción
  • Icono de menú que no se muestra en la barra de acción
  • Cómo cambiar el color del texto del elemento de menú en Android?
  • ¿Cómo conseguir la vista de la acción del artículo del menú?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.