2013-11-27 4 views
0

Как изменить цвет значка поиска в Android? По умолчанию цвет белый, возможно ли изменить цвет значка.android search view icon изменение цвета программно

Я попытался:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" > 

    <item 
     android:id="@+id/action_search" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@drawable/ic_theme_blue_menu" 
     android:showAsAction="always" 
     android:title="@string/search_actionbar"/> 
    <item 
     android:id="@+id/slider_menu" 
     android:icon="@drawable/ic_slider_menu" 
     android:orderInCategory="100" 
     android:showAsAction="always"/> 

</menu> 

Но мне нужно, чтобы изменить его в коде, а не в файле макета. Является ли это возможным?

ответ

2

К сожалению, нет простого способа изменить значок SearchView на пользовательский чертеж, так как атрибут темы searchViewSearchIcon не является общедоступным. Проверьте this ответ для деталей.

В качестве основы для вашей темы используйте android:Theme.Holo.Light.DarkActionBar. Значки по умолчанию на панели действий должны иметь светлый цвет.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    ... 
</style> 
+0

Спасибо! Я использовал Theme.AppCompat.Light с атрибутом textColorHint и textColor для белого. Но я не мог найти способ изменить цвет значка на белый. Но это такое чистое и простое решение. Теперь нет необходимости изменять эти атрибуты. – Shubhral

+0

Это сработало для меня. –

-2

вы можете использовать следующий код в вашем классе Java:

mView.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.LIGHTEN); 

Эта линия выше меняет цвет целей на долю цвета вы предлагаете в Color.parseColor() и оттенок, как вы определяете его с помощью PorterDuff.Mode. Вызовите вышеуказанный код одним нажатием кнопки, чтобы проверить, вступает ли изменение цвета.

1

То, что я делаю, я должен создать метод, чтобы изменить любому Drawable Color

public Drawable changeDrawableTint(Drawable drawable, int color){ 
    final Drawable wrappedDrawable = DrawableCompat.wrap(drawable); 
    DrawableCompat.setTintList(wrappedDrawable, ColorStateList 
      .valueOf(color)); 
    return wrappedDrawable; 
} 

, даже в андроид версии до леденца, то я получаю пункт меню вида поиска, и вызовите метод с желаемым цветом

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    /** 
    * We inflate the correct activity menu 
    */ 
    getMenuInflater().inflate(R.menu.menu_partner_list, menu); 

    searchViewMenuItem = menu.findItem(R.id.action_search); 
    if(searchViewMenuItem!=null && searchViewMenuItem.getIcon()!=null){ 
     searchViewMenuItem.setIcon(Utils.getInstance() 
       .changeDrawableTint(searchViewMenuItem.getIcon(), 
         Color.WHITE)); 
    } 
    setUpSearchView(menu); 
    shouldHideMenuActions(); 
    return true; 
} 

здесь меню

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" 
     android:icon="@drawable/ic_search" 
     android:title="@string/search" /> 

</menu> 
Смежные вопросы