Установить цвет кнопки ClearView SearchView

Я создаю searchview на панели инструментов, используя 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 в 24pt белый и добавили этот код в конец 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); 

Вместо значка отмены поиска по умолчанию вы можете использовать свой собственный значок.

Я использовал ниже код, который хорошо работает, Надеюсь, что сработает для вас.

 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(); } } 

Это будет работать над уровнем 14 api.

Вы также можете установить его из XML. Я использую библиотеку поддержки 24.2.1 и активность с темой, родителькой которой является «Theme.AppCompat.Light» и android.support.v7.widget.SearchView в ActionBar.

Вы можете установить 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 применяется к тексту подсказки