我几天前注意到,在我的 SearchView
中输入文本时,文本并没有显示出来。也许这个问题开始已经有一段时间了,只是我之前没有注意到,但当我第一次设置搜索功能时,我知道一切都运作良好。
以下是一张截图(我已经输入了文本,你可以看到它没有显示出来):
我已经尝试过更改 SearchView
上的文本颜色,使用这个SO问题,并尝试在我的可搜索配置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
的地方。结果会显示在另一个活动中。
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 (包含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/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(我的活动使用的布局)
<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>
你有任何想法或建议解决这个问题吗?