Ввод текста в SearchView не отображается
я заметил пару дней назад, что ввод текста в мой SearchView
не появляется. Может быть, эта проблема началась давно, и я ее не заметил, но я знаю, что все работало хорошо, когда я впервые настроил функцию поиска.
вот скриншот (я уже ввел текст, и вы можете видеть, что он не отображается):
я уже пытался изменить цвет текста SearchView
, С это так вопрос, и я также попытался изменить цвет текста в моем XML-файле конфигурации с возможностью поиска. После того, как я обнаружил, что ни одна из этих работ не работает, я отменил свои изменения, чтобы вы могли увидеть код, который у меня есть ниже:
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
}
обратите внимание, что я использовал new ComponentName(...)
вместо getSearchableInfo(getComponentName())
так как я использую разные имена пакетов в разных вкусах.
активность выше, где SearchView
is отображается. Результаты показаны в другой деятельности.
поиск.в 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>
...
стили.в XML (действие, содержащее SearchView
использует 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 / стили.в 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 (макет, который моя деятельность использует)
<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>
есть идеи о том, что может происходить или как я должен это решить?
2 ответов
У меня была та же проблема, и для меня это было потому, что я установил высоту панели инструментов в wrap_content. Попробуйте дать ему размер, как это:
<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"
/>
это код, который я использую для моего недавнего проекта, и это отлично работает:
определить search_menu.xml
(убедитесь, что использовать 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>
затем определите в своем onCreateOptionMenu
ваши действия:
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);
также моя панель инструментов:
<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" />
добавить метаданные в свой 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>
окончательный результат: