2012-12-22 16 views
29

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

enter image description here

+3

Wonders почему бы кто-нибудь вниз голосовать вопрос? –

+0

о белой строке под иконкой SearchView - как ее настроить? – AndrewS

+0

Вы когда-нибудь это выясняли? – theblang

ответ

6

В вашей теме:

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

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

+3

Установите его на '@android: color/transparent', чтобы удалить его или изменить его на то, что вы хотите. –

+0

@Mattias благодарит много: D –

+0

есть ли какой-нибудь список того, что вы можете изменить где? –

14

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

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

// find SearchView (im my case it's 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); 

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

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

+0

Я использую appcompat SearchView, и у меня есть этот значок внутри edit textbox и i не может уйти. есть ли у вас другие идеи? – AndrewS

+0

Вероятно, вы должны проверить, какая версия находится в вашей библиотеке, и посмотреть ее источники, в частности, на файл макета. Например, если вы посмотрите на [эти Android-источники] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core /res/res/layout/search_view.xml) вы увидите, что 'search_mag_icon' находится за пределами' search_plate'. С помощью источника вы можете определить, какие элементы «найти» в вашем макете. – Stan

+0

У меня есть последняя версия SupportLibrary, а в ресурсах search_mag_icon находится повсюду. может быть, что значок не search_mag_icon, а какой-то значок внутри SearchAutoComplete? Как я могу найти ресурсы для этого? – AndrewS

1

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

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

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

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

    searchPlate.setHint("Search"); 

Если вы хотите значка в виде подсказки текста используйте spanable строку с 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); 
2

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

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); 
1

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

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

Вы должны добавить эту строку в 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" /> 

Или вы можете сделать Programatically 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); 
} 
2

Вы должны настроить 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" /> 

Надеется, что это помогает!

0

В вашем стиле темы включают в себя следующее:

<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 является значком закрытия в правой части поля поиска.

0

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

app:searchHintIcon="@null"