我在SearchView中自定义搜索图标时遇到了一些问题。在我看来,图标可以在项目属性中更改,对吧?只需检查下面的代码即可。
谁能告诉我我哪里做错了?
这是我正在使用的菜单,带有我的自定义搜索图标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>
提前谢谢。
发布于 2012-05-04 17:11:13
发布于 2013-08-21 22:43:21
我找到了另一种方法来改变搜索图标,它与迭戈·皮诺的答案相同,但直接出现在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);
}
我遵循了更改此example中的edittext的示例。
你应该能够对你的SearchView
中的所有图标/背景都这样做,为了找到正确的ID,你可以查看here。
希望这对其他人也有帮助!
更新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
发布于 2014-08-02 14:17:54
来自@just_user的不错的回答
就我的例子而言,由于我将appcompat v7库用于SearchView + ActionBar,因此我对他的解决方案进行了一些修改,使其与我的项目兼容,因此只要您在添加appcompat v7作为库时没有修改任何内容,它就应该可以工作
XML:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:metrodeal="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/main_menu_action_search"
android:orderInCategory="100"
android:title="@string/search"
metrodeal:showAsAction="always"
metrodeal:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/search_btn"/>
</menu>
Java代码:
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem searchViewMenuItem = menu.findItem(R.id.main_menu_action_search);
SearchView mSearchView = (SearchView) MenuItemCompat.getActionView(searchViewMenuItem);
int searchImgId = android.support.v7.appcompat.R.id.search_button; // I used the explicit layout ID of searchview's ImageView
ImageView v = (ImageView) mSearchView.findViewById(searchImgId);
v.setImageResource(R.drawable.search_btn);
super.onPrepareOptionsMenu(menu);
}
为这个非常大的图标找借口(我还没有调整图标的大小),但它应该可以按原样工作。
https://stackoverflow.com/questions/10445760
复制相似问题