我正在使用appcompat库和工具栏,我在我的应用程序中实现了一个搜索视图。但我希望在展开时删除搜索视图图标。
这是我的菜单xml文件:
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"/>
这就是我给菜单充气的方式:
getMenuInflater().inflate(R.menu.main, menu);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
searchView.setQueryHint(getString(R.string.search_hint));
return super.onCreateOptionsMenu(menu);
这是我要删除的内容:
答案 0 :(得分:21)
这有助于我删除搜索图标
searchView.onActionViewExpanded();
如果您希望searchView始终展开,请使用以下内容:
{{1}}
答案 1 :(得分:9)
试试这个:
在您的应用主题中,添加以下行:
<item name="searchViewStyle">@style/MySearchViewStyle</item>
在下面添加定义样式:
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
<item name="searchHintIcon">@null</item>
</style>
答案 2 :(得分:4)
try {
Field mDrawable = SearchView.class.getDeclaredField("mSearchHintIcon");
mDrawable.setAccessible(true);
Drawable drawable = (Drawable) mDrawable.get(searchView);
drawable.setBounds(0, 0, 0, 0);
} catch (Exception e) {
e.printStackTrace();
}
setBounds可以实现魔力
答案 3 :(得分:2)
在你的onCreateOptionsMenu
中int searchPlateId = searchView.getContext().getResources()
.getIdentifier("android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView
.findViewById(searchPlateId);
searchPlate.setHint("");
答案 4 :(得分:2)
最简单的方法是Here...如果是AppCompat
app:iconifiedByDefault="false"
app:searchIcon="@null"
或者在其他情况下
android:iconifiedByDefault="false"
android:searchIcon="@null"
答案 5 :(得分:1)
如果您查看SearchView布局的android源代码,您会看到搜索图标的id为search_mag_icon。所以在onCreateOptionsMenu中,
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search,menu);
MenuItem searchViewItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView)searchViewItem.getActionView();
searchView.findViewById(R.id.search_mag_icon).setVisibility(View.GONE);
}
只需按ID查找视图,并将其可见性设置为已消失。
答案 6 :(得分:1)
<item android:id="@+id/menu_search"
android:icon="@drawable/action_search"
app:actionLayout="@layout/xx_layout"
app:showAsAction="always"/>
和xx_layout:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:searchHintIcon="@null"
android:iconifiedByDefault="true" />
答案 7 :(得分:0)
在SumeetP中查看this question的答案。不确定这是否有效,因为我从未使用它。他将搜索图标作为ImageView。所以我想你可以将图像设置为android.R.color.transparent
,这样它就不可见了。
答案 8 :(得分:0)
如果您具有自定义的搜索视图,只需将其添加到您的.xml布局中
app:searchIcon =“ @ null” app:iconifiedByDefault =“ false”
答案 9 :(得分:0)
对于androidx
和SearchView
的新版本:
如果您从代码中添加SearchView
,则这样做非常有效。
在styles.xm
<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
<item name="searchHintIcon">@null</item>
</style>
并在您的应用style
中应用了theme
:
<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="searchViewStyle">@style/SearchViewMy</item>
</style>
或者,如果您从xml添加SearchView
,则在布局中添加以下行:
app:searchHintIcon="@null"