Подтвердить что ты не робот

Иконка Android SearchView

Я хочу отключить значок Mag, отображаемый внутри компонента просмотра. Любая идея, как ссылаться на нее и удалять ее или заменять ее на другую?

enter image description here

4b9b3361

Ответ 1

В вашей теме:

<style name="Theme" parent="Your parent theme">
<item name="android:searchViewSearchIcon">@android:drawable/ic_search</item>
</style>

Edit:
searchViewSearchIcon - частный атрибут. Поэтому этот ответ не работает (на родном ActionBar).

Ответ 2

Поскольку формулировка вопроса не содержит упоминания ActionBarSherlock (кроме тега), и добавлены комментарии, что принятый ответ не работает для стандартной и/или панели действий библиотеки поддержки, я отправляю другой ответ. Вот код Java для onCreate:

// obtain action bar
ActionBar actionBar = getSupportActionBar();

// find SearchView (im my case it in a custom layout because of left alignment)
View v = actionBar.getCustomView();
SearchView searchView = (SearchView)v.findViewById(R.id.search_view);
ImageView icon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);

// method 1: does not work persistently, because the next line
// should be probably called after every manipulation with SearchView
// icon.setVisibility(View.GONE);

// method 2: working code
icon.setAdjustViewBounds(true);
icon.setMaxWidth(0);
icon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
icon.setImageDrawable(null);

В соответствии с этим сообщением , используя SearchView из библиотеки поддержки (android-support-v7-appcompat в моем случае) с setIconifiedByDefault(false), значок отображается вне редактирования текстового поля (SearchAutoComplete). В противном случае (setIconifiedByDefault(true)) он отображается внутри поля. Представленный код используется для отключенной "значки" по умолчанию и может потребовать некоторых изменений для работы с "отображаемым" видом поиска. Я не знаю, относится ли это к ActionBarSherlock.

Надеюсь, что это поможет.

Ответ 3

Этот значок является подсказкой. Таким образом, вы можете просто установить новый текст подсказки.

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);

    searchPlate.setHint("Search");

Если вы хотите, чтобы значок в качестве текста подсказки использовал spanable string с ImageSpan

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);


    searchPlate.setTextColor(getResources().getColor(R.color.search_text_color));
    SpannableString string = new SpannableString(" ");
    Drawable d = getResources().getDrawable(R.drawable.ic_search);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
    string.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    searchPlate.setHint(string);

Ответ 4

Вы должны добавить эту строку в свой MenuItem android:iconifiedByDefault="@android:color/transparent"

<item
    android:id="@+id/activity_home_action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/activity_home_search_title"
    android:iconifiedByDefault="@android:color/transparent"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always|collapseActionView" />

Или вы можете сделать программно searchView.setIconifiedByDefault(true);

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    getMenuInflater().inflate(R.menu.home, menu);

    MenuItem searchMenuItem = menu.findItem(R.id.activity_home_action_search);

    SearchView searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setIconifiedByDefault(true);
}

Ответ 5

Вы должны настроить стиль SearchView следующим образом:

<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
    <!-- Search button icon -->
    <item name="searchIcon">@drawable/ic_arrow_back</item>
</style>

Затем добавьте его в AppTheme.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!--   your other colors and styles -->
    <item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>

И примените его к вашему поисковому представлению с помощью тега style:

<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/searchView"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            app:queryHint="@string/search_hint"
            android:focusable="true"
            android:focusableInTouchMode="true"
            style="@style/MySearchViewStyle"
            app:iconifiedByDefault="false" />

Надеюсь, что это поможет!

Ответ 6

Если вы используете библиотеку совместимости приложений v7, вы можете легко изменить это в теме. В вашей теме, которая простирается от темы AppCompat, просто добавьте строку, например:

<item name="searchViewSearchIcon">@drawable/ic_search</item>

Ответ 7

Чтобы удалить кнопку поиска подсказки:

mNearMeSearchBar = (SearchView) mView.findViewById(R.id.nearme_search_component_nearme_edittext);
mNearMeSearchBar.setIconifiedByDefault(false); //Removes Search Hint Icon

Чтобы изменить кнопку поиска:

int searchImgId = getResources().getIdentifier("android:id/search_mag_icon", null, null);
ImageView v = (ImageView) mNearMeSearchBar.findViewById(searchImgId);
v.setImageResource(R.drawable.ic_compass);

Ответ 8

Эти линии удалили увеличительное стекло:

    //remove search icon
    mSearchView.setIconifiedByDefault(false);
    ImageView icon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
    icon.setVisibility(View.GONE);

Ответ 9

В вашем стиле темы укажите это:

<style name="YourTheme.Toolbar">
    <item name="searchViewStyle">@style/YourActionBarSearch</item>
    <item name="editTextColor">@color/your_ab_text_color</item>
    <item name="android:textColorHint">@color/your_ab_hint_color</item>
</style>

Теперь вы можете определить стиль SearchView с помощью searchViewStyle, а editTextColor установит цвет текста в поле поиска. Установив android:textColorHint, вы также установите цвет подсказки, например. "Поиск...".

<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView">
    <item name="searchIcon">@drawable/ic_ab_search</item>
    <item name="queryBackground">@null</item>
    <item name="submitBackground">@null</item>
    <item name="searchHintIcon">@null</item>
    <item name="defaultQueryHint">@null</item>
    <item name="closeIcon">@drawable/ic_ab_small_search_close</item>
</style>

Это будет выглядеть так, как вам нравится, более или менее. Поле searchIcon - это значок на панели действий. Поле searchHintIcon - это маленький значок слева от подсказки в поле поиска, о котором вы просите в своем вопросе; установите его на @null, чтобы удалить значок. Поле closeIcon является значком закрытия в правой части поля поиска.

Ответ 10

В xml в компоненте searchView добавьте следующий:

app:searchHintIcon="@null"