wake-up-neo.com

Ändern Sie die Farbe der Symbolleiste in Appcompat 21

Ich teste die neuen Funktionen von Appcompat 21 Material Design. Deshalb habe ich eine Toolbar wie diese erstellt:

<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/activity_my_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar"/>

und es in meine Hauptlayoutdatei aufgenommen.

Dann habe ich es wie folgt als supportActionBar gesetzt:

Toolbar toolBar = (Toolbar)findViewById(R.id.activity_my_toolbar);
setSupportActionBar(toolBar);

Es funktioniert, aber irgendwie kann ich nicht ganz herausfinden, wie man die Symbolleiste anpasst. Es ist grau und der Text darauf ist schwarz. Wie soll ich die Hintergrund- und Textfarbe ändern?

Ich habe diese Anweisungen durchgegangen:

http://Android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

Was habe ich überwacht, um die Farben zu ändern?

 <style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="Android:windowActionBar" tools:ignore="NewApi">false</item>
    <item name="windowActionBar">false</item>
</style>

[~ # ~] edit [~ # ~] :

Ich konnte die Hintergrundfarbe ändern, indem ich diese Codezeilen zum Thema hinzufügte:

<item name="colorPrimary">@color/actionbar</item>
<item name="colorPrimaryDark">@color/actionbar_dark</item>

Sie wirken sich jedoch nicht auf die Textfarbe aus. Was vermisse ich? Anstelle des schwarzen Texts und der schwarzen Menüschaltfläche würde ich lieber einen weißen Text und weiße Menüschaltflächen bevorzugen:

enter image description here

86
user2410644

auch dies ist alles in dem von Ihnen angegebenen Link

um den Text in Weiß zu ändern, müssen Sie lediglich das Thema ändern.

benutze dieses Thema

<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/activity_my_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
177
tyczj

Sie können ein app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" theme wie in anderen Antworten vorgeschlagen, aber Sie können auch eine Lösung wie die folgende verwenden:

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    style="@style/HeaderBar"
    app:theme="@style/ActionBarThemeOverlay"
    app:popupTheme="@style/ActionBarPopupThemeOverlay"/>

Mit diesen Stilen haben Sie die volle Kontrolle über Ihre Benutzeroberflächenelemente:

<style name="ActionBarThemeOverlay" parent="">
    <item name="Android:textColorPrimary">#fff</item>
    <item name="colorControlNormal">#fff</item>
    <item name="colorControlHighlight">#3fff</item>
</style>

<style name="HeaderBar">
    <item name="Android:background">?colorPrimary</item>
</style>

<style name="ActionBarPopupThemeOverlay" parent="ThemeOverlay.AppCompat.Light" >
    <item name="Android:background">@Android:color/white</item>
    <item name="Android:textColor">#000</item>
</style>
57

Hey, wenn du Material Theme nur für Android 5.0) anwenden willst, kannst du dieses Theme hinzufügen

<style name="AppHomeTheme" parent="@Android:style/Theme.Material.Light">

        <!-- customize the color palette -->
        <item name="Android:colorPrimary">@color/blue_dark_bg</item>
        <item name="Android:colorPrimaryDark">@color/blue_status_bar</item>
        <item name="Android:colorAccent">@color/blue_color_accent</item>
        <item name="Android:textColor">@Android:color/white</item>
        <item name="Android:textColorPrimary">@Android:color/white</item>
        <item name="Android:actionMenuTextColor">@Android:color/black</item>
    </style> 

Hier unten ist die Zeile für die Textfarbe der Aktionsleiste des Materialdesigns verantwortlich.

<item name="Android:textColorPrimary">@Android:color/white</item>
9
Herry

Sie können eine benutzerdefinierte Symbolleiste Elementfarbe dynamisch festlegen, indem Sie eine benutzerdefinierte Symbolleistenklasse erstellen:

package view;

import Android.app.Activity;
import Android.content.Context;
import Android.graphics.ColorFilter;
import Android.graphics.PorterDuff;
import Android.graphics.PorterDuffColorFilter;
import Android.support.v7.internal.view.menu.ActionMenuItemView;
import Android.support.v7.widget.ActionMenuView;
import Android.support.v7.widget.Toolbar;
import Android.util.AttributeSet;
import Android.util.Log;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.AutoCompleteTextView;
import Android.widget.EditText;
import Android.widget.ImageButton;
import Android.widget.ImageView;
import Android.widget.TextView;

public class CustomToolbar extends Toolbar{

    public CustomToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        ctxt = context;
    }

    int itemColor;
    Context ctxt;

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        Log.d("LL", "onLayout");
        super.onLayout(changed, l, t, r, b);
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    } 

    public void setItemColor(int color){
        itemColor = color;
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    }



    /**
     * Use this method to colorize toolbar icons to the desired target color
     * @param toolbarView toolbar view being colored
     * @param toolbarIconsColor the target color of toolbar icons
     * @param activity reference to activity needed to register observers
     */
    public static void colorizeToolbar(Toolbar toolbarView, int toolbarIconsColor, Activity activity) {
        final PorterDuffColorFilter colorFilter
                = new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.SRC_IN);

        for(int i = 0; i < toolbarView.getChildCount(); i++) {
            final View v = toolbarView.getChildAt(i);

            doColorizing(v, colorFilter, toolbarIconsColor);
        }

      //Step 3: Changing the color of title and subtitle.
        toolbarView.setTitleTextColor(toolbarIconsColor);
        toolbarView.setSubtitleTextColor(toolbarIconsColor);
    }

    public static void doColorizing(View v, final ColorFilter colorFilter, int toolbarIconsColor){
        if(v instanceof ImageButton) {
            ((ImageButton)v).getDrawable().setAlpha(255);
            ((ImageButton)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof ImageView) {
            ((ImageView)v).getDrawable().setAlpha(255);
            ((ImageView)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof AutoCompleteTextView) {
            ((AutoCompleteTextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof TextView) {
            ((TextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof EditText) {
            ((EditText)v).setTextColor(toolbarIconsColor);
        }

        if (v instanceof ViewGroup){
            for (int lli =0; lli< ((ViewGroup)v).getChildCount(); lli ++){
                doColorizing(((ViewGroup)v).getChildAt(lli), colorFilter, toolbarIconsColor);
            }
        }

        if(v instanceof ActionMenuView) {
            for(int j = 0; j < ((ActionMenuView)v).getChildCount(); j++) {

                //Step 2: Changing the color of any ActionMenuViews - icons that
                //are not back button, nor text, nor overflow menu icon.
                final View innerView = ((ActionMenuView)v).getChildAt(j);

                if(innerView instanceof ActionMenuItemView) {
                    int drawablesCount = ((ActionMenuItemView)innerView).getCompoundDrawables().length;
                    for(int k = 0; k < drawablesCount; k++) {
                        if(((ActionMenuItemView)innerView).getCompoundDrawables()[k] != null) {
                            final int finalK = k;

                            //Important to set the color filter in seperate thread, 
                            //by adding it to the message queue
                            //Won't work otherwise. 
                            //Works fine for my case but needs more testing

                            ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);

//                              innerView.post(new Runnable() {
//                                  @Override
//                                  public void run() {
//                                      ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);
//                                  }
//                              });
                        }
                    }
                }
            }
        }
    }



}

verweisen Sie dann in Ihrer Layoutdatei darauf. Jetzt können Sie mit eine benutzerdefinierte Farbe festlegen

toolbar.setItemColor(Color.Red);

Quellen:

Die Informationen dazu habe ich hier gefunden: Wie man die Symbolleistenfarbe dynamisch ändert Android Symbolleistenfarbe

und dann habe ich es bearbeitet, verbessert und hier gepostet: GitHub: AndroidDynamicToolbarItemColor

6
Michael Kern

Dies ist die sogenannte DarkActionBar, dh Sie sollten das folgende Thema verwenden, um den gewünschten Stil zu erhalten:

<Android.support.v7.widget.Toolbar  
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="@dimen/triple_height_toolbar"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
5
MrEngineer13

Sie können die Farbe des Texts in der Symbolleiste folgendermaßen ändern:

<item name="Android:textColorPrimary">#FFFFFF</item>
<item name="Android:textColor">#FFFFFF</item>
2
Chris Cromer

Verwenden Sie dazu das toolbar wie folgt:

<Android.support.v7.widget.Toolbar
        Android:id="@+id/base_toolbar"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:background="@color/colorPrimary"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
2
clementiano

Versuchen Sie dies in Ihrer styles.xml:

colorPrimary ist die Farbe der Symbolleiste.

<resources>

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_pressed</item>
    <item name="colorAccent">@color/accent</item>
</style>

Hast du das übrigens in Eclipse gebaut?

1
user2683292

Wenn Sie die Farbe Ihrer Symbolleiste in der gesamten App ändern möchten, können Sie die Datei styles.xml verwenden. Im Allgemeinen vermeide ich es, UI-Komponenten in meinem Java) - Code zu ändern, es sei denn, ich versuche, etwas programmgesteuert zu tun So sieht Ihre styles.xml aus:

    <!-- Base application theme. -->
<style name="YourAppName.AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Color Primary will be your toolbar color -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <!-- Color Primary Dark will be your default status bar color -->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

Stellen Sie sicher, dass Sie den obigen Stil in Ihrer AndroidManifext.xml als solchen verwenden:

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

Ich wollte verschiedene Symbolleistenfarben für verschiedene Aktivitäten. Also habe ich Stile wieder so eingesetzt:

    <style name="YourAppName.AppTheme.Activity1">
    <item name="colorPrimary">@color/activity1_primary</item>
    <item name="colorPrimaryDark">@color/activity1_primaryDark</item>
</style>

<style name="YourAppName.AppTheme.Activity2">
    <item name="colorPrimary">@color/activity2_primary</item>
    <item name="colorPrimaryDark">@color/activity2_primaryDark</item>
</style>

wenden Sie die Stile wie folgt auf jede Aktivität in Ihrer AndroidManifest.xml an:

<activity
    Android:name=".Activity2"
    Android:theme="@style/YourAppName.AppTheme.Activity2"
</activity>

<activity
    Android:name=".Activity1"
    Android:theme="@style/YourAppName.AppTheme.Activity1"
</activity>
1
Ryan Newsom

ich löste dieses Problem nach mehr Studie ...

für Api21 und mehr verwenden

   <item name="Android:textColorPrimary">@color/white</item>

für niedrigere Versionen verwenden

   <item name="actionMenuTextColor">@color/white</item>
1
Dinesh

Für Personen, die AppCompatActivity mit Toolbar als weißem Hintergrund verwenden. Verwenden Sie diesen Code.

Stand: Dezember 2017

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:theme="@style/ThemeOverlay.AppCompat.Light">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar_edit"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        app:popupTheme="@style/AppTheme.AppBarOverlay"
        app:title="Edit Your Profile"/>

</Android.support.design.widget.AppBarLayout>
0
zackygaurav