Option 1) Der schnelle und einfache Weg (nur Symbolleiste)
Seit appcompat-v7-r23 können Sie die folgenden Attribute direkt für Ihren Toolbar
oder seinen Stil verwenden:
app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"
Wenn Ihr Mindest-SDK 23 ist und Sie native verwenden, Toolbar
ändern Sie einfach das Namespace-Präfix in android
.
In Java können Sie die folgenden Methoden verwenden:
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
Diese Methoden verwenden eine Farbe int und keine Farbressourcen-ID!
Option 2) Überschreiben Sie den Stil und die Themenattribute der Symbolleiste
layout / 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"/>
values / styles.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>
Hilfe! Meine Symbole haben auch ihre Farbe geändert!
@PeterKnut hat gemeldet, dass dies die Farbe der Überlaufschaltfläche, der Navigationsschubladenschaltfläche und der Zurückschaltfläche beeinflusst. Es ändert auch die Textfarbe von SearchView
.
Zu den Symbolfarben: Die colorControlNormal
erbt von
android:textColorPrimary
für dunkle Themen (weiß auf schwarz)
android:textColorSecondary
für helle Themen (schwarz auf weiß)
Wenn Sie dies auf das Thema der Aktionsleiste anwenden , können Sie die Symbolfarbe anpassen.
<item name="colorControlNormal">#de000000</item>
In appcompat-v7 bis r23 gab es einen Fehler, bei dem Sie auch das native Gegenstück wie folgt überschreiben mussten:
<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>
Hilfe! Mein SearchView ist ein Chaos!
Hinweis: Dieser Abschnitt ist möglicherweise veraltet.
Da Sie das Such-Widget verwenden, das aus irgendeinem Grund einen anderen Zurückpfeil (nicht visuell, technisch) als den in appcompat-v7 enthaltenen verwendet, müssen Sie ihn manuell im Thema der App festlegen . Die Drawables der Support-Bibliothek werden korrekt getönt. Sonst wäre es immer weiß.
<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
Was den Text der Suchansicht betrifft ... gibt es keinen einfachen Weg. Nachdem ich die Quelle durchgesehen hatte, fand ich einen Weg, um zur Textansicht zu gelangen. Ich habe dies nicht getestet. Bitte lassen Sie mich in den Kommentaren wissen, ob dies nicht funktioniert hat.
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: Überschreiben Sie die ActionBar-Stil- und Themenattribute
Ein geeignetes Design für eine Standardaktion appcompat-v7-Aktionsleiste würde folgendermaßen aussehen:
<!-- 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>