SearchView中的文字输入不显示 [英] Text input in SearchView doesn't show

查看:71
本文介绍了SearchView中的文字输入不显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

几天前,我注意到在 SearchView 中输入文字没有显示.也许这个问题是在更早之前开始的,我还没有注意到,但是我知道当我第一次设置搜索功能时一切都很好.

这是屏幕截图(我已经输入了文本,您可以看到它没有显示):

我已经尝试通过此SO问题,并且我还尝试过更改可搜索的配置XML文件中的文本颜色.在发现所有这些都不起作用之后,我撤消了更改,以便您可以在下面看到我当前拥有的代码:

MainActivity.java

  @Overridepublic boolean onCreateOptionsMenu(Menu){...//将可搜索的配置与SearchView相关联SearchManager searchManager =(SearchManager)getSystemService(SEARCH_SERVICE);MenuItem searchMenuItem = menu.findItem(R.id.action_search);SearchView searchView =(SearchView)searchMenuItem.getActionView();searchView.setSearchableInfo(searchManager.getSearchableInfo(新的ComponentName(this,SearchResultsActivity.class))));//注意:getSearchableInfo(getComponentName())不适用于所有类型//由于应用程序ID不同} 

请注意,由于我在不同口味中使用了不同的包名称,因此我使用了 new ComponentName(...)而不是 getSearchableInfo(getComponentName())./p>

上面的活动是显示 SearchView 的地方.结果显示在另一个活动中.

searchable.xml

 <可搜索的xmlns:android ="http://schemas.android.com/apk/res/android"android:label ="@ string/app_name"android:hint ="@ string/search_hint"/> 

AndroidManifest.xml

  ...<活动android:name =.ui.MainActivity"android:label ="@ string/title_activity_main"android:theme ="@ style/AppTheme"><元数据android:name ="android.app.default_searchable"android:value =.SearchResultsActivity"/></activity>...<活动android:name =.ui.filter.SearchResultsActivity"android:label ="@ string/title_activity_search_results"android:parentActivityName =.ui.MainActivity"android:theme ="@ style/AppTheme.Search"><元数据android:name ="android.support.PARENT_ACTIVITY"android:value ="com.companyname.appname.ui.MainActivity"/><意图过滤器>< action android:name ="android.intent.action.SEARCH"/></intent-filter><元数据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.DrawerLayoutxmlns: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

 < RelativeLayoutxmlns: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.CoordinatorLayoutandroid:layout_width ="match_parent"android:layout_height ="match_parent"android:layout_above ="@ + id/adView">< android.support.design.widget.AppBarLayoutandroid:fitsSystemWindows ="true"android:layout_width ="match_parent"android:layout_height ="wrap_content">< android.support.v7.widget.Toolbarandroid: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"/><!-这是为了防止错误-></android.support.design.widget.AppBarLayout>< include layout ="@ layout/fragment_misc_no_results"android:id ="@ + id/fragment_no_results"/>< android.support.v7.widget.RecyclerViewandroid: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.AdViewandroid: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> 

关于可能发生的事情或我应该如何解决的任何想法?

解决方案

我遇到了同样的问题,对我来说,这是因为我将工具栏的高度设置为wrap_content.尝试给它一个尺寸,像这样:

 < android.support.v7.widget.Toolbarandroid:layout_width ="match_parent"android:layout_height =?attr/actionBarSize"app:theme ="@ style/ToolbarTheme"app:popupTheme ="@ style/AppTheme.PopupOverlay"app:layout_scrollFlags ="scroll | enterAlways"/> 

I noticed a couple days ago that inputting text in my SearchView doesn't show up. Maybe this problem started longer ago and I hadn't noticed it, but I know that everything was working well when I first set up search functionality.

Here is a screenshot (I have already entered text, and you can see that it is not showing):

I have already tried to change the colour of the text on the SearchView, with this SO question, and I've also tried changing the text colour in my searchable configuration XML file. After I found that none of these work, I undid my changes so that you can see the code I currently have below:

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

}

Note that I've used new ComponentName(...) instead of getSearchableInfo(getComponentName()) since I use different package names in my different flavours.

The activity above is where the SearchView is displayed. The results are shown in another activity.

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 (the activity containing the SearchView uses 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 (the layout that my activity uses)

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

Any ideas on what might be going on or how I should solve it?

解决方案

I had the same issue, and for me it was because I had set my toolbar height to wrap_content. Try giving it a size, like this:

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

这篇关于SearchView中的文字输入不显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆