Opcja 1) Szybki i łatwy sposób (tylko pasek narzędzi)
Od appcompat-v7-r23 możesz używać następujących atrybutów bezpośrednio w swoim Toolbar
lub jego stylu:
app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"
Jeśli minimalny zestaw SDK to 23 i używasz natywnego, Toolbar
po prostu zmień prefiks przestrzeni nazw na android
.
W Javie możesz użyć następujących metod:
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
Te metody pobierają kolor int, a nie identyfikator zasobu koloru!
Opcja 2) Zastąp styl i atrybuty motywu paska narzędzi
układ / xxx.xml
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.MyApp.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
style="@style/Widget.MyApp.Toolbar.Solid"/>
wartości / style.xml
<style name="Widget.MyApp.Toolbar.Solid" parent="Widget.AppCompat.ActionBar">
<item name="android:background">@color/actionbar_color</item>
<item name="android:elevation" tools:ignore="NewApi">4dp</item>
<item name="titleTextAppearance">...</item>
</style>
<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
<!-- Parent theme sets colorControlNormal to textColorPrimary. -->
<item name="android:textColorPrimary">@color/actionbar_title_text</item>
</style>
Wsparcie! Moje ikony też zmieniły kolor!
@PeterKnut zgłosił, że ma to wpływ na kolor przycisku przepełnienia, przycisku szuflady nawigacji i przycisku Wstecz. Zmienia również kolor tekstu SearchView
.
Odnośnie kolorów ikon: colorControlNormal
Dziedziczy z
android:textColorPrimary
dla ciemnych motywów (biały na czarnym)
android:textColorSecondary
do jasnych motywów (czarny na białym)
Jeśli zastosujesz to do motywu paska akcji , możesz dostosować kolor ikony.
<item name="colorControlNormal">#de000000</item>
Wystąpił błąd w appcompat-v7 do r23, który wymagał od Ciebie zastąpienia natywnego odpowiednika w następujący sposób:
<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>
Wsparcie! Mój SearchView to bałagan!
Uwaga: ta sekcja jest prawdopodobnie nieaktualna.
Ponieważ używasz widżetu wyszukiwania, który z jakiegoś powodu używa innej strzałki wstecz (nie wizualnie, technicznie) niż ten dołączony do appcompat-v7, musisz ustawić go ręcznie w motywie aplikacji . Elementy do rysowania w bibliotece pomocy są odpowiednio przyciemniane. W przeciwnym razie zawsze byłby biały.
<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
Jeśli chodzi o tekst widoku wyszukiwania ... nie ma łatwego sposobu. Po przekopaniu się przez jego źródło znalazłem sposób na przejście do widoku tekstu. Nie testowałem tego, więc daj mi znać w komentarzach, jeśli to nie zadziałało.
SearchView sv = ...; // get your search view instance in onCreateOptionsMenu
// prefix identifier with "android:" if you're using native SearchView
TextView tv = sv.findViewById(getResources().getIdentifier("id/search_src_text", null, null));
tv.setTextColor(Color.GREEN); // and of course specify your own color
Bonus: Zastąp styl i atrybuty motywu ActionBar
Odpowiedni styl dla domyślnego paska akcji appcompat-v7 wyglądałby następująco:
<!-- ActionBar vs Toolbar. -->
<style name="Widget.MyApp.ActionBar.Solid" parent="Widget.AppCompat.ActionBar.Solid">
<item name="background">@color/actionbar_color</item> <!-- No prefix. -->
<item name="elevation">4dp</item> <!-- No prefix. -->
<item name="titleTextStyle">...</item> <!-- Style vs appearance. -->
</style>
<style name="Theme.MyApp" parent="Theme.AppCompat">
<item name="actionBarStyle">@style/Widget.MyApp.ActionBar.Solid</item>
<item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>