ツールバー付きの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);
これは私が削除したいものです:
これは私が検索アイコンを削除するのに役立ちました
searchView.setIconified(false);
SearchViewを常に拡張したい場合は、次のように使用します。
searchView.onActionViewExpanded();
これを試して:
アプリのテーマに、次の行を追加します。
<item name="searchViewStyle">@style/MySearchViewStyle</item>
以下でスタイルを定義します。
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
<item name="searchHintIcon">@null</item>
</style>
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は魔法を行います
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"
<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" />
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でビューを見つけ、その可視性を「消えた」に設定するだけです。
カスタマイズされた検索ビューがある場合は、これを.xmlレイアウトに追加するだけです。
app:searchIcon = "@ null" app:iconifiedByDefault = "false"