SearchView en OptionsMenu no ancho completo

Tengo un SearchView que funciona y se expande en mi OptionsMenu cuando el usuario toca el ícono de búsqueda. Sin embargo, solo se expande dentro del espacio disponible entre los otros icons de OptionsMenu. En una pantalla panorámica esto está bien, pero con un espacio estrecho solo hay espacio para mostrar 5-10 caracteres en el cuadro de búsqueda. Quiero que se superponga a los otros icons, como lo hace para la aplicación Contactos de Android. Actualmente, estoy construyendo con targetSdkVersion = 17. Con suerte me falta algo simple 🙂

(Nota añadida después: la única solución que he encontrado viable hasta ahora es ocultar todos los icons del menú cuando quiero expandir el ícono de búsqueda. Esto es conceptualmente simple. Pero es complicado porque al restaurar icons ocultos, uno tiene que ir a través de un montón de lógica para descubrir cuáles restaurar, o mantener variables de estado, etc.)

Aquí está mi artículo xml para OptionsMenu:

 

También tengo en mi código de actividad principal:

 @Override public boolean onCreateOptionsMenu (Menu menu) { getMenuInflater().inflate(R.menu.nav_menu, menu); this.optionsMenu = menu; MenuItem searchItem = menu.findItem (R.id.menu_search_shallow); searchItem.setOnActionExpandListener (this); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setQueryHint (getString (R.string.search_shallow_hint)); searchItem = menu.findItem (R.id.menu_search_deep); searchItem.setOnActionExpandListener (this); searchView = (SearchView) searchItem.getActionView(); searchView.setQueryHint (getString (R.string.search_deep_hint)); } 

y

 @Override public boolean onMenuItemActionExpand(MenuItem item) { SearchView searchView = (SearchView) item.getActionView(); searchView.setOnQueryTextListener (this); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { SearchView searchView = (SearchView) item.getActionView(); searchView.setQuery ("", false); return true; } 

Tuve un problema similar, que la barra de búsqueda no llenó todo el ancho, (pero no tenía otros íconos). Lo resolví agregando un ítem:

 android:actionLayout="@layout/my_search_view" 

y en layout / my_search_view.xml:

 < ?xml version="1.0" encoding="utf-8"?>  

En lugar de crear un nuevo diseño, establezco el MaxWidth programáticamente en onCreateOptionsMenu ():

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_search, menu); SearchView searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView(); searchView.setMaxWidth(Integer.MAX_VALUE); .... 

Por alguna razón, la solución de jjung no funcionó para mí. Tuve que agregar android:maxWidth="10000dp" , solo un ancho máximo muy alto, para que se expandiera al ancho total disponible.

Además, solo para agregar, estoy usando la biblioteca de soporte (v7), y mi archivo de diseño se ve así:

  

Y en mi artículo, tengo:

   ... 

Donde myapp es solo un espacio de nombres arbitrario para los atributos agregados por la biblioteca de soporte (ver Agregar elementos de acción para más detalles).

Tal vez llego tarde pero pensé que podría ser útil para alguien que se enfrentó al mismo problema que yo.

 final SearchView searchView = (SearchView) myActionMenuItem.getActionView(); searchView.setMaxWidth(Integer.MAX_VALUE);//set search menu as full width 

en onCreateOptionsMenu de su clase puede resolver este problema, pero hay una cosa que debemos entender. Si solo desea mostrar el menú de búsqueda (al hacer clic en el botón de búsqueda) y no otros elementos del menú en la barra de acciones, debe mantener el elemento de búsqueda como primer elemento en el archivo de menú. Aquí hay un ejemplo

  < ?xml version="1.0" encoding="utf-8"?>      

Y se mostrará como enter image description here

al hacer clic en buscar, se mostrará como ancho completo

enter image description here

Y si mantiene la búsqueda como segundo o último elemento en el menú, se mostrará así.

enter image description here

y al hacer clic en buscar enter image description here

Hay tantas formas de resolver este problema, solo agregaré la que he usado en varias aplicaciones.

Tengo mi SearchView personalizado (con alguna otra personalización) que amplía android.support.v7.widget.SearchView y para estirar al ancho completo:

 @Override public void setLayoutParams(final ViewGroup.LayoutParams params) { params.width = ViewGroup.LayoutParams.MATCH_PARENT; super.setLayoutParams(params); }