2013-01-16 17 views
16

Użyłem "Android Action Bar Style Generator" w celu wygenerowania własnego motywu Holo. Następnie dodałem dwie ikony do paska akcji, jedną do filtru wyszukiwania i jedną do selektora plików, obie ikony są białe. Ikona selektora plików (po prawej) wygląda dobrze, ale jakoś ikona wyszukiwania wygląda ciemnoszaro. Podczas wpisywania w widoku tekstu wyszukiwania przycisk zamykania również wygląda ciemnoszarym.Jak zmienić domyślną ikonę wyszukiwania w SearchView?

Próbowałem zmienić kolor paska akcji, a także z widoku wyszukiwania, bez powodzenia. Dlaczego widok wyszukiwania pokazuje ten kolor? Jak mogę to zmienić?

ActionBar with two actions

Dziękuję bardzo.

UPDATE: Myślałem, że moja aplikacja została przy moim ikonę, ale nie, używa widoku ikon domyślnej wyszukiwarki, więc moje pytanie faktycznie jest, w jaki sposób mogę zmienić domyślną ikonę widoku wyszukiwania? To zdanie w pliku menu.xml nie działa:

android:icon="@drawable/selectable_header_search" 

Odpowiedz

17

Niestety, nie ma łatwego sposobu, aby zmienić ikonę SearchView do niestandardowego rozciągliwej, ponieważ atrybut motyw searchViewSearchIcon nie jest publiczna. Aby uzyskać szczegółowe informacje, patrz this odpowiedź.

Uważam jednak, że Twój problem spowodowany jest dziedziczeniem z niewłaściwego tematu. Proszę używać android:Theme.Holo.Light.DarkActionBar jako podstawy dla motywu. Domyślne ikony na pasku akcji powinny mieć jasny kolor.

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

Dla tych, jak ja, mając nadzieję znaleźć sposób, żeby naprawdę zmienić ikonę, można użyć tego z actionbar Sherlock:

 // Getting the 'search_icon' 
     ImageView searchIcon = (ImageView)searchView.findViewById(R.id.abs__search_button); 
     // Setting background of 'search_plate' to earlier defined drawable. 
     searchIcon.setImageResource(R.drawable.search_button_selector); 

Nie można zmienić domyślny jeden ze wspólnym sposób android:icon , ponieważ związane z nim pole zostało ustawione jako prywatne.

+1

To oczywiście działa tylko jeśli używasz ActionBarSherlock –

6

spróbuj ustawić się w showAsAction tę opcję: * MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW *

Bez tej opcji SearchView nie biorą ikonę którego konfiguracji dla przycisku akcji.

menu.add("Search") 
      .setIcon(
        getResources().getDrawable(
          R.drawable.selectable_header_search)) 
      .setActionView(searchView) 
      .setShowAsAction(
        MenuItem.SHOW_AS_ACTION_ALWAYS 
          | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
          | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
+1

to rozwiązać go (zwyczaj ikona nie działa) dla mnie, Android 4.1 do 5.0. Równorzędnie w menu XML: 'app: showAsAction =" always | collapseActionView "' – Jonik

0

Najprostszym sposobem, w jaki znalazłem zmianę domyślnej ikony wyszukiwania na pasku akcji, jest strona onPrepareOptionsMenu. Możesz zobaczyć moją odpowiedź here na podobne pytanie!

9

Ponieważ atrybut searchViewSearchIcon nie jest publiczny, można zmienić ikonę za pomocą następującego kodu:

int searchIconId = searchView.getContext().getResources().getIdentifier("android:id/search_button",null, null); 
ImageView searchIcon = (ImageView) searchView.findViewById(searchIconId); 
searchIcon.setImageResource(R.drawable........); 
+3

powoduje to wyjątek nullPointerException – desgraci

+0

to nie działa na Android 4.3, 4.4 – SjoerdvGestel

+0

Super działa – Bahu

0

W stylu motywu to w ten sposób:

<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> 

Teraz można określić styl SearchView z searchViewStyle i editTextColor ustawi kolor tekstu w polu wyszukiwania. Ustawiając android:textColorHint, ustawisz także kolor wskazówki, np. "Szukaj...".

<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">@drawable/ic_ab_small_search</item> 
    <item name="defaultQueryHint">@string/toolbar_search_hint</item> 
    <item name="closeIcon">@drawable/ic_ab_small_search_close</item> 
</style> 

Spowoduje to ukrycie widoku wyszukiwania w dowolny sposób, mniej lub bardziej. Pole searchIcon jest ikoną na pasku akcji. Pole searchHintIcon to mała ikona po lewej stronie wskazówki w polu wyszukiwania. Pole closeIcon jest zamkniętą ikoną po prawej stronie pola wyszukiwania.

to sprawdzić, więcej ustawień stylu:

$ANDROID_SDK/platforms/android-24/data/res/values/styles_holo.xml 
Powiązane problemy