Text input in SearchView doesn't show

跟風遠走 提交于 2019-12-01 15:00:34

问题


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?


回答1:


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



回答2:


This is the code I use for my recent project and it's work fine:

First define search_menu.xml (make sure use 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>

Then define in your onCreateOptionMenu of your Activity:

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

Also my Toolbar:

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

Add meta-data to your 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>

Final result:



来源:https://stackoverflow.com/questions/38575061/text-input-in-searchview-doesnt-show

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!