web-dev-qa-db-ja.com

ヒントテキストから検索ビューアイコンを削除する

ツールバー付きの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

11
user1785900

これは私が検索アイコンを削除するのに役立ちました

searchView.setIconified(false);

SearchViewを常に拡張したい場合は、次のように使用します。

searchView.onActionViewExpanded();
22
Rafael

これを試して:

アプリのテーマに、次の行を追加します。

<item name="searchViewStyle">@style/MySearchViewStyle</item>

以下でスタイルを定義します。

<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
    <item name="searchHintIcon">@null</item>
</style>
12
hac.jack
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は魔法を行います

4
Rodrigo Wiggers

OnCreateOptionsMenuで

int searchPlateId = searchView.getContext().getResources()
            .getIdentifier("Android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView
            .findViewById(searchPlateId);
    searchPlate.setHint("");

最も簡単な方法は ここに...AppCompatの場合

app:iconifiedByDefault="false"
app:searchIcon="@null"

またはその他の場合

Android:iconifiedByDefault="false"
Android:searchIcon="@null"
2
<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" />
2
AK5T

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でビューを見つけ、その可視性を「消えた」に設定するだけです。

1
nupadhyaya

カスタマイズされた検索ビューがある場合は、これを.xmlレイアウトに追加するだけです。

app:searchIcon = "@ null" app:iconifiedByDefault = "false"

0
Kenart

SumeetP の答え この質問 を調べてください。私はそれを使ったことがないので、それがうまくいくかどうかはわかりません。彼は検索アイコンをImageViewとして取得します。したがって、画像をAndroid.R.color.transparentに設定して、画像が表示されないようにすることができると思います。

0
Seshu Vinay