tutorial studio ejemplo docs bar android searchview options-menu

android - studio - SearchView en OptionsMenu no ancho completo



searchview android ejemplo (5)

En lugar de crear un nuevo diseño, configuro MaxWidth mediante programación 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); ....

Tengo un SearchView en funcionamiento que se expande en mi menú de opciones cuando el usuario toca el ícono de búsqueda. Sin embargo, solo se expande dentro del espacio disponible entre los otros iconos del Menú de opciones. En una pantalla ancha, esto está bien, pero con un espacio estrecho solo hay espacio para mostrar de 5 a 10 caracteres en el cuadro de búsqueda. Quiero que se superponga a los otros iconos, como ocurre con la aplicación Contactos de Android. Actualmente, estoy construyendo con targetSdkVersion = 17. Espero que me esté perdiendo algo simple :)

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

Aquí está mi artículo xml para el menú de opciones:

<item android:id="@+id/menu_search_shallow" android:title="Search Current Folder" android:icon="@drawable/ic_btn_search" android:showAsAction="always|collapseActionView" android:actionViewClass="android.widget.SearchView" />

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; }


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

Tengo mi SearchView personalizado (con alguna otra personalización) que se extiende android.support.v7.widget.SearchView y con el fin de estirar todo el ancho:

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


Por alguna razón, la solución de Jjung no funcionó para mí. Tuve que agregar android:maxWidth="10000dp" , solo un maxwidth muy alto, para que se expanda al ancho completo disponible.

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

<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxWidth="10000dp" />

Y en mi artículo, tengo:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto"> <item ... myapp:actionLayout="@layout/searchview" /> ...

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


Tal vez llego tarde pero pensé que podría ser útil para alguien que enfrentó el 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 acción, 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"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!--keeping searach as first item--> <item android:id="@+id/action_search" android:icon="@drawable/search_ab" android:title="@string/search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="ifRoom" /> <item android:id="@+id/itemFilter" android:icon="@drawable/filter" android:title="@string/filter" app:showAsAction="ifRoom" /> </menu>

Y se mostrará como

Al hacer clic en la búsqueda se mostrará como ancho completo.

Y si sigue buscando como segundo o último elemento en el menú, se mostrará así.

y haciendo clic en buscar


Tuve un problema similar: la barra de búsqueda no ocupaba todo el ancho (pero no tenía otros íconos). Lo solucioné agregando en el ítem:

android:actionLayout="@layout/my_search_view"

y en layout / my_search_view.xml:

<?xml version="1.0" encoding="utf-8"?> <SearchView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" />