onCreateOptionsMenu
を使用してツールバーに検索ビューを作成していますが、クリアなX
ボタンを最初は白にすることができません。文字を入力し始めると白くなります。また、クリア後も白のままです。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.responsible_menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); //TODO: May not be needed?
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String query)
{
mAdapter.updateUIWithFilter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText)
{
mAdapter.updateUIWithFilter(newText);
return false;
}
});
// Does not work! Still not white.
ImageView searchClose = (ImageView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_close_btn);
searchClose.setColorFilter(Color.argb(255, 255, 255, 255));
searchClose.setAlpha(255);
return true;
}
responsible_menu.xml:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:appcompat="http://schemas.Android.com/apk/res-auto"
xmlns:app="http://schemas.Android.com/tools">
<item
Android:id="@+id/menu_search"
Android:title="@string/search"
appcompat:actionViewClass="Android.support.v7.widget.SearchView"
appcompat:showAsAction="always"/>
</menu>
解決策を見つけました。しかし、より良いものに興味があります。
https://www.google.com/design/icons/#ic_clear から「クリアボタン」の画像を24ポイントの白でダウンロードし、このコードをonCreateOptionsMenu
の末尾に追加しました
// Does help!
ImageView searchClose = (ImageView) searchView.findViewById(Android.support.v7.appcompat.R.id.search_close_btn);
searchClose.setImageResource(R.drawable.ic_clear_white_24dp);
これを試して:
ImageView searchClose = searchView.findViewById(Android.support.v7.appcompat.R.id.search_close_btn);
searchClose.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
XMLから設定することもできます。サポートライブラリ24.2.1と、親が「Theme.AppCompat.Light」であるテーマのアクティビティと、ActionBarのAndroid.support.v7.widget.SearchViewを使用しています。
次のように、アクティビティテーマにactionBarWidgetThemeを設定できます。
<style name="ActivityTheme" parent="Theme.AppCompat.Light">
<item name="actionBarWidgetTheme">@style/MyActionBarWidgetTheme</item>
</style>
次に、MyActionBarWidgetThemeを定義し、必要な色を設定します。
<style name="MyActionBarWidgetTheme">
<item name="Android:textColorSecondary">@Android:color/white</item>
</style>
Android:textColorSecondaryは閉じるアイコンに適用されます
Android:textColorPrimaryは、入力したテキストに適用されます
colorControlActivatedはカーソルに適用されます
Android:textColorHintはヒントテキストに適用されます
Searchviewのデフォルトのキャンセルアイコンの代わりに、独自のカスタムアイコンを使用できます。
私はうまく機能する以下のコードを使用しました、それがあなたのために機能することを願っています。
private void setCloseSearchIcon(SearchView searchView) {
try {
Field searchField = SearchView.class.getDeclaredField("mCloseButton");
searchField.setAccessible(true);
ImageView closeBtn = (ImageView) searchField.get(searchView);
closeBtn.setImageResource(R.drawable.ic_close);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
これは、APIレベル14より上で機能します。
Kotlin
private fun configureCloseButton(searchView: SearchView) {
val searchClose = searchView.javaClass.getDeclaredField("mCloseButton")
searchClose.isAccessible = true
val closeImage = searchClose.get(searchView) as ImageView
closeImage.setImageResource(R.drawable.arrow_back_gray) // your image here
}