La entrada de texto en SearchView no se muestra
Me di cuenta hace un par de días que la introducción de texto en mi SearchView
no aparece. Tal vez este problema comenzó hace mucho tiempo y no lo había notado, pero sé que todo estaba funcionando bien cuando configuré por primera vez la funcionalidad de búsqueda.
Aquí hay una captura de pantalla (ya he ingresado texto, y se puede ver que no se muestra):
- Filtro de búsquedaVer ListView
- Cómo agregar espacio a la sugerencia de AutoCompleteTextView
- Filtros de búsqueda y filtrar sugerencias
- No se puede mostrar el teclado automáticamente en el SearchView
- Icono de Android SearchView
Ya he intentado cambiar el color del texto en el SearchView
, con esta pregunta SO , y también he intentado cambiar el color del texto en mi archivo XML de configuración de búsqueda. Después de encontrar que ninguno de estos trabajos, deshice mis cambios para que pueda ver el código que actualmente tengo a continuación:
MainActivity.java
@Override public boolean onCreateOptionsMenu(Menu) { ... // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); MenuItem searchMenuItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchMenuItem.getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchResultsActivity.class))); // Note: getSearchableInfo(getComponentName()) will not work on all flavours // because of a difference in app IDs }
Tenga en cuenta que he utilizado new ComponentName(...)
lugar de getSearchableInfo(getComponentName())
ya que uso diferentes nombres de paquetes en mis diferentes sabores.
La actividad anterior es donde se muestra el SearchView
. Los resultados se muestran en otra actividad.
Searchable.xml
<searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" />
AndroidManifest.xml
... <activity android:name=".ui.MainActivity" android:label="@string/title_activity_main" android:theme="@style/AppTheme"> <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity" /> </activity> ... <activity android:name=".ui.filter.SearchResultsActivity" android:label="@string/title_activity_search_results" android:parentActivityName=".ui.MainActivity" android:theme="@style/AppTheme.Search"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.companyname.appname.ui.MainActivity" /> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> ...
Styles.xml (la actividad que contiene el AppTheme.NavDrawer
utiliza AppTheme.NavDrawer
)
... <style name="Base.AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="colorButtonNormal">?colorAccent</item> </style> <style name="AppTheme" parent="Base.AppTheme"> <item name="colorPrimary">@color/theme_primary</item> <item name="colorPrimaryDark">@color/theme_primary_dark</item> <item name="colorAccent">@color/theme_accent</item> </style> <style name="AppTheme.NavDrawer"> <item name="android:windowBackground">@color/window_background</item> </style> ...
V21 / styles.xml
<style name="AppTheme.NavDrawer"> <item name="android:windowBackground">@color/window_background</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> </style> ....
Activity_main_filterable.xml (el diseño que usa mi actividad)
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawerLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" > <include layout="@layout/activity_main_content" /> <include layout="@layout/navdrawer" android:id="@+id/navigationView" /> <include layout="@layout/filter_drawer" android:id="@+id/filter_drawer" /> </android.support.v4.widget.DrawerLayout>
Activity_main_content.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:ads="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/adView"> <android.support.design.widget.AppBarLayout android:fitsSystemWindows="true" android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" style="@style/AppTheme.Toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" app:layout_scrollFlags="scroll|enterAlways"/> <include layout="@layout/blank" /> <!-- This is to prevent bugs --> </android.support.design.widget.AppBarLayout> <include layout="@layout/fragment_misc_no_results" android:id="@+id/fragment_no_results"/> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" style="@style/AppTheme.RecyclerView.StandardList" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" ads:adSize="SMART_BANNER" ads:adUnitId="@string/banner_ad_unit_id" /> </RelativeLayout>
¿Alguna idea sobre lo que podría estar pasando o cómo debería solucionarlo?
- Cómo corregir el corte personalizado de fondo SearchView en el paisaje?
- La barra de acciones sólo muestra un elemento junto a la vista de búsqueda
- Android ActionBar: plegable SearchView con botón de acción
- SearchView en AppCompat distorsiona el icono
- ¿Cómo implementar WhatsApp como el diseño de materiales SearchView?
- SearchView como la aplicación Google Play Video
- MenuItemCompat.setOnActionExpandListener no hace nada
- No se puede generar SearchView en Fragmento (AppCompat)
Tuve el mismo problema, y para mí fue porque había establecido la altura de mi barra de herramientas en wrap_content. Intente darle un tamaño, como esto:
<android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:theme="@style/ToolbarTheme" app:popupTheme="@style/AppTheme.PopupOverlay" app:layout_scrollFlags="scroll|enterAlways" />
Este es el código que utilizo para mi proyecto reciente y funciona bien:
Primero defina search_menu.xml
(asegúrese de usar android supportV7
):
<?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"> <item android:id="@+id/search" android:icon="@drawable/ic_search_gray" android:title="@string/action_search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always" /> </menu>
A continuación, defina en su onCreateOptionMenu
de su Actividad:
MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_search, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search)); searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(getApplicationContext(), SearchActivity.class))); searchView.setMaxWidth(Integer.MAX_VALUE); MenuItemCompat.expandActionView(menu.findItem(R.id.search)); searchView.setIconifiedByDefault(true); searchView.setIconified(false);
También mi barra de herramientas:
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/gray_lightest" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:contentInsetStartWithNavigation="0dp" />
Agregue meta-datos a su AndroidManifest.xml
:
<activity android:name=".ui.activity.SearchActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" android:value=".ui.activity.SearchActivity" /> </activity>
Resultado final:
- ¿Cuál es el propósito de las herramientas: openDrawer = "start" al crear un DrawerLayout (con NavigationView) desde el asistente?
- Cómo crear diseño con 6 botones como ventanas de azulejos