Удалить значок "Поиск в представлении" из текста подсказки
Я использую библиотеку 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);
это то, что я хочу удалить:
11 ответов
Это помогло мне удалить значок поиска
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 делает волшебство
<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" />
Самый простой способ здесь... В случае AppCompat
app:iconifiedByDefault="false"
app:searchIcon="@null"
ИЛИ в другом случае
android:iconifiedByDefault="false"
android:searchIcon="@null"
В вашем onCreateOptionsMenu
int searchPlateId = searchView.getContext().getResources()
.getIdentifier("android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView
.findViewById(searchPlateId);
searchPlate.setHint("");
Если вы посмотрите на исходный код Android для макета SearchView, вы увидите, что значок поиска имеет идентификатор 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);
}
Просто найдите представление по идентификатору и установите его видимость исчезла.
За
androidx
и новая версия
SearchView
: Если вы добавите
SearchView
из кода, это эффективно для этого. Добавить новый стиль в
styles.xm
<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
<item name="searchHintIcon">@null</item>
</style>
и применил это
style
в вашем приложении
theme
:
<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="searchViewStyle">@style/SearchViewMy</item>
</style>
Или если вы добавите
SearchView
из xml, затем добавьте эту строку в свой макет:
app:searchHintIcon="@null"
Если у вас есть настраиваемое представление поиска, просто добавьте его в свой макет.xml.
app:searchIcon="@null" app:iconifiedByDefault="false"
Это старый вопрос, но он очень помог мне в моем случае: если вы пытаетесь спрятаться внутри меню, ни один из вопросов, размещенных здесь, не сработал для меня идеально (приветствую AK5T, который почти решил мою проблему). Что решило проблему: вместо того, чтобы ставить
app:actionViewClass="android.widget.SearchView"
внутри пункта в меню вы можете изменить для:
app:actionLayout="@layout/search_layout"
И внутри этого макета вы можете добавить этот фрагмент кода:
<?xml version="1.0" encoding="utf-8"?>
<android.widget.SearchView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:searchHintIcon="@drawable/nothing_drawed"/>
И, наконец, внутри drawable вы просто создаете его без ничего внутри, например:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
</selector>
Только этот способ мне помог. Когда я пытался скрыть searchHintIcon, установив значение @null или что-то еще, все оставалось так же, как если бы я не писал никакого кода.
Посмотрите на SumeetP в этом вопросе. Не уверен, что это работает, потому что я никогда не использовал его. Он получает значок поиска в виде ImageView. Я думаю, вы можете просто установить изображение на android.R.color.transparent
так что это не будет видно.