如何更改SearchView上的默认图标,以便在Android的操作栏中使用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我在自定义SearchView中的搜索图标时遇到了一些麻烦。在我看来,图标可以在Item属性中更改,对吧?

有人能告诉我我做错了什么吗?

这是我正在使用的菜单,使用我的自定义搜索图标icn_lupa。但是当我运行应用程序时,我总是得到默认的搜索图标:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
      android:title="@string/menu_search"
      android:icon="@drawable/icn_lupa"
      android:showAsAction="always"
      android:actionViewClass="android.widget.SearchView" />
</menu>
提问于
用户回答回答于

它看起来像actionViewClass覆盖该图标,它看起来不像你可以改变它。

你有两个解决方案:

  • 与它一起生活,我认为这是用户体验和平台一致性方面的最佳选择。
  • 你自己定义个actionViewClass
用户回答回答于

我找到了另一种方法来改变搜索图标,它与迭戈皮诺的回答相同,但直接进入onPrepareOptionsMenu

在你的menu.xml中:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_fav"
      android:title="@string/action_websearch"
      android:showAsAction="always|never"
      android:actionViewClass="android.widget.SearchView" />
</menu>

在你的活动中:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem searchViewMenuItem = menu.findItem(R.id.action_search);    
    mSearchView = (SearchView) searchViewMenuItem.getActionView();
    int searchImgId = getResources().getIdentifier("android:id/search_button", null, null);
    ImageView v = (ImageView) mSearchView.findViewById(searchImgId);
    v.setImageResource(R.drawable.your_new_icon); 
    mSearchView.setOnQueryTextListener(this);
    return super.onPrepareOptionsMenu(menu);
}

你应该可以为你的所有图标/背景执行此操作SearchView,以查找你可以在此处查看的正确ID :

更新2017年11月:

由于这个答案android已更新的可能性,通过XML更改搜索图标。

如果你的目标是android v21以下的任何东西,你可以使用:

<android.support.v7.widget.SearchView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:searchIcon="@drawable/ic_search_white_24dp"
    app:closeIcon="@drawable/ic_clear_white_24dp" />

或者v21及更高版本:

<SearchView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:searchIcon="@drawable/ic_search_white_24dp"
    android:closeIcon="@drawable/ic_clear_white_24dp" />

还有更多的选择:

closeIcon
commitIcon
goIcon
searchHintIcon
searchIcon
voiceIcon

扫码关注云+社区