Как удалить или изменить значок поиска в панели действий SearchView?
Как удалить или изменить значок поиска в тексте редактирования? Я использую библиотеку Appcompat.
Я использовал приведенный ниже код для изменения и удаления, но он не работает:
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
View search_mag_icon = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
search_mag_icon.setBackgroundResource(R.drawable.ic_stub);
//search_mag_icon.setVisibility(View.GONE);
9 ответов
Наконец-то нашел решение. Попробуйте следующее:
try {
Field mDrawable = SearchView.class.getDeclaredField("mSearchHintIcon");
mDrawable.setAccessible(true);
Drawable drawable = (Drawable)mDrawable.get(your search view here);
drawable.setAlpha(0);
} catch (Exception e) {
e.printStackTrace();
}
Согласно сообщению в блоге AppCompat v21, вы можете предоставить собственный стиль для вашего SearchView
, переопределяя такие вещи, как значок поиска:
<style name="Theme.MyTheme" parent="Theme.AppCompat">
<item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
<!-- Search button icon -->
<item name="searchIcon">@drawable/custom_search_icon</item>
</style>
Нет хорошей идеи использовать частный метод как SearchView.class.getDeclaredField("mSearchHintIcon");
<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" />
Вы можете использовать следующие строки кода:
int searchMagIcon = getResources().getIdentifier("search_mag_icon", "id", "android");
ImageView SearchHintIcon = (ImageView) searchView.findViewById(searchMagIcon);
Это сохранит ImageView, а затем вы можете изменить его.
Я использовал пункт меню со свойством app:actionViewClass="android.support.v7.widget.SearchView"
На активности я установил:
searchView = (SearchView) searchMenuItem.getActionView();
searchView.setIconifiedByDefault(false);
Чтобы удалить значок, который я сделал:
ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
searchIcon.setImageDrawable(null);
Просто установите для свойства searchHintIcon значение null в SearchView.
приложение:searchHintIcon="@null"
Самый простой способ
Если вы используете
AppCompat
использованиеapp:iconifiedByDefault="false" app:searchIcon="@null"
Остальное использовать
android
на местеapp
в приведенном выше коде какandroid:iconifiedByDefault="false" android:searchIcon="@null"
remove - это правый объект, который вы упомянули в xml:
final Drawable remove = ContextCompat.getDrawable(getActivity(), R.drawable.ic_close_circle);
etSearchProducts.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if (etSearchProducts.getCompoundDrawables()[2] == null) {
return false;
}
if (event.getAction() != MotionEvent.ACTION_UP) {
return false;
}
if (event.getX() > etSearchProducts.getWidth() - etSearchProducts.getPaddingRight() - remove.getIntrinsicWidth()) {
etSearchProducts.setText("");
Utility.hideKeyboard(getActivity());
}
return false;
}
});
Я много копал об этом и, наконец, нашел это решение, и оно работает для меня!
Вы можете использовать это
Если вы используете appcompat, попробуйте следующее:
ImageView searchIconView = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_button);
searchIconView.setImageResource(R.drawable.yourIcon);
Если вы используете androidx, попробуйте следующее:
ImageView searchIconView = (ImageView) searchView.findViewById(androidx.appcompat.R.id.search_button);
searchIconView.setImageResource(R.drawable.yourIcon);
Это изменит значок просмотра по умолчанию.
Надеюсь, это поможет!