SearchView en OptionsMenu no de ancho completo

6 minutos de lectura

SearchView en OptionsMenu no de ancho completo
peri hartman

Tengo un SearchView en funcionamiento que se expande en mi menú de opciones cuando el usuario toca el icono de búsqueda. Sin embargo, solo se expande dentro del espacio disponible entre los otros íconos 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 íconos como lo hace 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 de 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, 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;
}

En lugar de crear un nuevo diseño, configuré 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);
    ....

  • searchView.setMaxWidth(Integer.MAX_VALUE); resuelve el problema.

    – Rahul Upadhyay

    23 dic. 15 a las 11:48

  • Android N lo mostró correctamente (podría haber sido el ancho de la pantalla), pero Nexus 6 (malvavisco) presenta este problema. Esta solución funcionó para Nexus 6 mientras que los demás no

    – behelit

    11 mar. 16 a las 5:16


  • searchView.setMaxWidth(Integer.MAX_VALUE); resuelve el problema

    – Tigran Sarkisian

    16 mar. 16 a las 14:05


  • mi problema se está solucionando. Gracias.

    – saranya

    02 feb.

  • ¡Gracias, esta es la única solución útil para mí!

    –Roberto Conte Rosito

    08 mar. 17 en 20:44

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

Además, solo para agregar, estoy usando la biblioteca de soporte (v7), por lo que 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 (ver Adición de elementos de acción para más detalles).

  • genial, esta solución también funcionó para mí. ¿Es este 10000 un número arbitrario?

    – Thanos pescador

    23 abr.

  • Esta solución funcionó para mí, solo que estoy usando el SearchView Elemento XML en lugar del widget de soporte. Creo que esto debería marcarse como solución correcta.

    – qefzec

    03 may. 15 en 14:35

  • @ThanosF Sí, es arbitrario. Solo se necesita un valor realmente alto.

    – mchristie

    03 may. 15 en 21:02

  • No funciona para mí. ¿Agregó el diseño de vista de búsqueda como un archivo de diseño separado?

    – NinjaCoder

    20 jul.

  • @NinjaCoder Sin un archivo de diseño, debe establecer el ancho mediante programación en match_parent, luego funciona.

    – 0101100101

    06 ago. 15 en 11:22

Tal vez llegué 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 cualquier otro elemento del menú en la barra de acción, debe mantener el elemento de búsqueda como primer elemento en el archivo del 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
ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

y al hacer clic en buscaringrese la descripción de la imagen aquí

  • ¿De dónde sacaste ese ícono de filtro? por favor proporcione un enlace para ser descargado

    – Prajwal Waingankar

    16 jul. 19 en 11:38

  • solución genial searchView.setMaxWidth(Integer.MAX_VALUE);//establecer el menú de búsqueda como ancho completo esto resolvió

    – Amin Pinjari

    16 jul. 19 en 12:46

Por loco que parezca, en mi caso el problema era esta línea:
aplicación:actionViewClass=”android.widget.SearchView” en menú.xml:

 <item
        android:id="@+id/action_search"
        app:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_search"
        android:title="@string/title"
        app:actionLayout="@layout/layout_search"
        app:showAsAction="always" />

cuando eliminé aplicación: actionViewClass, se expandió completamente como se define en mi archivo layout_search.

<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxWidth="10000dp"
android:layout_centerInParent="true"
android:background="@color/colorAccent"
android:queryHint="Search me" />

SearchView en OptionsMenu no de ancho completo
jjung

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

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" />

  • Esto suena razonable. No voy a cambiar el código de trabajo en este momento, pero marcaré esta respuesta como correcta bajo el supuesto de que lo hiciste bien.

    –Peri Hartman

    29 oct.

  • no funciona, solo establecer MaxWidth = 10000 ampliará la vista pero ocultará otros elementos

    – Hiep

    01 ago.


SearchView en OptionsMenu no de ancho completo
Oleksandr

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

tengo mi costumbre Vista de búsqueda (con alguna otra personalización) que se extiende 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);
}

  • Esto suena razonable. No voy a cambiar el código de trabajo en este momento, pero marcaré esta respuesta como correcta bajo el supuesto de que lo hiciste bien.

    –Peri Hartman

    29 oct.

  • no funciona, solo establecer MaxWidth = 10000 ampliará la vista pero ocultará otros elementos

    – Hiep

    01 ago.


.

¿Ha sido útil esta solución?