webentwicklung-frage-antwort-db.com.de

Ändern der Material Design AppCompat ActionBar-Farbe

Ich habe die Farbe der AppCompat-Statusleiste mit actionBarStyle geändert und einen Stil mit einem Hintergrund erstellt, der der gewünschten Farbe entspricht.

Mit dem Material Design AppCompat funktioniert diese Methode jetzt nicht mehr.

Kannst du mir helfen? Vielen Dank.

27
user3184899

Es gibt ein neues Attribut namens colorPrimary, das Sie in Ihrem Design definieren können. Dadurch erhalten Sie für ActionBar oder Toolbar eine durchgehende Farbe. 

Nachfolgend ein kleines Beispiel:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/my_action_bar_color</item>
</style>

Bitte beachten Sie: Es muss nur colorPrimary sein, nicht Android:colorPrimary, in jedem Werteordner außer dem values-v21-Ordner.

Weitere Informationen zum Anpassen der Farbpalette finden Sie unter developer.Android.com .

90
reVerse

In meinem Fall hatte @reVerse eine teilweise Antwort. Ich musste einige zusätzliche Änderungen vornehmen, um colorPrimary zum Laufen zu bringen, weil ich andere Teile der Symbolleiste anpasste ... insbesondere die Textfarbe.

Hier ist meine Datei "styles.xml" mit Kommentaren, die angibt, was ich falsch gemacht habe:

<!-- As @reVerse mentioned, you need to use colorPrimary instead of Android:colorPrimary -->
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/my_toolbar_color</item>
</style>

<!-- I was incorrectly using @style/Theme.AppCompat.Light for the popupTheme attribute -->
<style name="MyToolbarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="theme">@style/MyToolbarTextStyle</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>

<!-- I was incorrectly using Them.AppCompat.Light for the parent here -->
<style name="MyToolbarTextStyle" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:textColorPrimary">@color/my_toolbar_text_color</item>
</style>

Wenn Sie also mehr als die Hintergrundfarbe der Symbolleiste anpassen, müssen Sie unbedingt eines der ThemeOverlay-Designs verwenden. Andernfalls wird colorPrimary ignoriert.

Der Vollständigkeit halber sei hier die Layout-Datei angegeben, die ich für meine Symbolleiste Toolbar.xml verwende:

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schmeas.Android.com/apk/res-auto"
    style="@style/MyToolbarStyle"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />

Hoffentlich hilft das jemandem!

3
Justin

Die Anweisungen in der Dokumentation zum Einrichten der App-Leiste empfehlen, das Thema in der Android-Manifest-Datei folgendermaßen einzustellen:

<application
    Android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    />

In meiner Erfahrung überschrieb dies jedoch den colorPrimary-Stil, der für das benutzerdefinierte AppTheme eingerichtet wurde. Was für mich funktionierte, war die Definition eines benutzerdefinierten Designs wie folgt:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Und dann, um dieses Thema in der AndroidManifest-Datei zu verwenden.

<application
    Android:theme="@style/AppTheme"
    />

Nach dieser Einstellung funktionierte die Hintergrundfarbe der Symbolleiste in der auf colorPrimary basierenden Aktivität einwandfrei.

<Android.support.v7.widget.Toolbar
    Android:id="@+id/my_toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="?attr/colorPrimary"
    Android:elevation="4dp"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

(Das Festlegen der ThemeOverlay mit einem dunklen Design stellt sicher, dass der Text hell ist.)

0
Suragch
   <style name="AppTheme" parent="Theme.AppCompat.Light">

        <item name="colorPrimary">@color/ColorPrimary</item>
        <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
        <!-- Customize your theme here. -->
    </style>

Siehe auch: Benutzerdefinierte Aktionsleiste erstellen

0
Half Moon