搜索视图关闭图标显示为禁用状态而不是白色

11
无论我在搜索视图中输入什么,关闭按钮(X)似乎都被禁用了,而不是以白色出现。如何解决此错误,使其以白色显示?

无论我在搜索视图中输入什么,关闭按钮(X)似乎都被禁用了,而不是以白色出现。如何解决此错误,使其以白色显示?

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_search_list, menu);
    MenuItem item = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
    searchView.setOnQueryTextListener(this);
    searchView.setQueryHint(getResources().getString(R.string.station_search_hint));
}

菜单搜索列表.xml

<?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/action_search"
        android:icon="@drawable/ic_action_search_light"
        android:title="@string/action_search"
        android:orderInCategory="100"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
4个回答

4

清晰的解决方案,当关闭图标为空时隐藏它。

app:showAsAction属性中使用"collapseActionView|always"

<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_search"
    android:title="@string/menu_action_search"
    app:showAsAction="collapseActionView|always"
    app:actionViewClass="android.support.v7.widget.SearchView"/>

1
ImageView close_button = (ImageView)searchView.findViewById(R.id.close_button);
close_button .setBackgroundResource(R.drawable.your_icon);

或者(使用选择器)
 ImageView close_button =(ImageView)searchView.findViewById(R.id.close_button);
 close_button .setBackgroundResource(R.drawable.your_image_selector);   

你知道如何用适当的答案和代码解决这个问题吗?快速滚动大字母缩略图预览不显示 - wbk727
我们可以设置分配给关闭按钮的空间吗?我使用了上面的代码,它运行良好,但是我设置的新图像几乎对齐到搜索框的中心。 - Nimmagadda Gowtham

1

我认为下面的代码可以复制粘贴

View close = searchView.findViewById(R.id.search_close_btn);
close.setBackgroundResource(R.drawable.desired_icon);

这不是一个好的解决方案。请使用样式来解决。
第一种解决方案。将关闭图标作为默认值android:searchViewCloseIcon添加到您的主题中:
<style name="Theme" parent="AppBaseTheme">
<item name="android:searchViewCloseIcon">@drawable/ic_your_search_close_icon</item>
</style>

第二种解决方案(更好)。美化您的操作栏。
<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

<!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="searchViewCloseIcon">@android:drawable/ic_your_search_close_icon</item>
    </style>

其他SearchView属性(来自appcompat-v7源代码更新链接)):

<attr name="searchResultListItemHeight" format="dimension" />
<attr name="searchViewAutoCompleteTextView" format="reference" />
<attr name="searchViewCloseIcon" format="reference" />
<attr name="searchViewEditQuery" format="reference" />
<attr name="searchViewEditQueryBackground" format="reference" />
<attr name="searchViewGoIcon" format="reference" />
<attr name="searchViewSearchIcon" format="reference" />
<attr name="searchViewTextField" format="reference" />
<attr name="searchViewTextFieldRight" format="reference" />
<attr name="searchViewVoiceIcon" format="reference" />

使用示例:

<item name="searchDropdownBackground">@android:drawable/spinner_dropdown_background</item>
<item name="searchViewTextField">@drawable/textfield_searchview_holo_dark</item>
<item name="searchViewTextFieldRight">@drawable/textfield_searchview_right_holo_dark</item>
<item name="searchViewCloseIcon">@android:drawable/ic_clear</item>
<item name="searchViewSearchIcon">@android:drawable/ic_search</item>
<item name="searchViewGoIcon">@android:drawable/ic_go</item>
<item name="searchViewVoiceIcon">@android:drawable/ic_voice_search</item>
<item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_holo_dark</item>
<item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>
<item name="searchDialogTheme">@style/Theme.SearchBar</item>

关于样式的更多信息:
Android - 在其中设置ActionBar和SearchView主题 by Andreas Nilsson
美化操作栏 by Android官方文档


1
你的 styles.xml 文件:在你的主题中: - Aleksandr
错误已经消失了,但这个需要放在styles.xml中吗?<attr name="searchViewCloseIcon" format="reference" /> - wbk727
1
当然,这应该在styles.xml中而不是attrs.xml中。 - Aleksandr
@MacaronLover,以下是我添加的属性列表,以帮助您查看所有属性。您不需要将它们添加到您的代码中。您只需要编辑样式即可。 - Aleksandr
使用此代码后,它会显示需要最低SDK 21。我真的必须将其更改为21吗?我的当前版本是14。请注意,我的搜索视图所在的活动不是主要活动:<!-- 基本应用程序主题。--> <style name="AppTheme" parent="Theme.AppCompat"> <!-- 在此处自定义您的主题。--> <item name="android:searchViewStyle">@style/SearchViewStyle</item> </style> - wbk727
显示剩余7条评论

1
您的代码看起来很好。 尝试以下代码:

final MenuItem search = menu.findItem(R.id.action_search);
    if (search != null) {
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
        search.expandActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                // Your Logic
                return false;
            }
        });
        MenuItemCompat.setOnActionExpandListener(search, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return false;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                finish();
                return true;
            }
        });

再来一个微调: 在onPrepareOptionsMenu中尝试使用上述代码,并在顶部添加以下额外的行。

menu.clear();
getMenuInflater().inflate(R.menu.menu_search_list, menu);
...
// Above code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接