从提示文本中删除“搜索视图”图标

时间:2014-12-03 06:36:03

标签: android android-actionbar android-appcompat searchview android-actionbar-compat

我正在使用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);

这是我要删除的内容:

enter image description here

10 个答案:

答案 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)

对于androidxSearchView的新版本: 如果您从代码中添加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"
相关问题