it-swarm.com.de

Wie ändert man die Farbe des hinteren Pfeils im neuen Materialthema?

Ich habe mein SDK auf API 21 aktualisiert. Jetzt ist das Symbol "Zurück/Hoch" ein schwarzer Pfeil, der nach links zeigt.

Black back arrow

Ich möchte, dass es grau ist. Wie kann ich das machen?

Im Play Store zum Beispiel ist der Pfeil weiß.

Ich habe dies gemacht, um einige Stile festzulegen. Ich habe @drawable/abc_ic_ab_back_mtrl_am_alpha für homeAsUpIndicator verwendet. Das Zeichen ist transparent (nur Alpha), aber der Pfeil wird schwarz angezeigt. Ich frage mich, ob ich die Farbe wie in DrawerArrowStyle einstellen kann. Oder wenn die einzige Lösung darin besteht, meinen @drawable/grey_arrow zu erstellen und ihn für homeAsUpIndicator zu verwenden.

<!-- Base application theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light">

    <item name="Android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>

    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>

    <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
    <item name="Android:homeAsUpIndicator" tools:ignore="NewApi">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
</style>

<!-- ActionBar style -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">

    <item name="Android:background">@color/actionbar_background</item>
    <!-- Support library compatibility -->
    <item name="background">@color/actionbar_background</item>
</style>

<!-- Style for the navigation drawer icon -->
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@color/actionbar_text</item>
</style>

Meine bisherige Lösung war, den @drawable/abc_ic_ab_back_mtrl_am_alpha, der weiß zu sein scheint, zu nehmen und ihn mit einem Fotoeditor in der gewünschten Farbe zu malen. Es funktioniert, obwohl ich lieber @color/actionbar_text wie in DrawerArrowStyle verwenden möchte.

170
Ferran Maylinch

Sie können es durch Code erreichen. Erhalten Sie den rückseitigen Pfeil, der mit einem Filter gezeichnet werden kann, und legen Sie ihn als Schaltfläche "Zurück" fest.

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

Revision 1:

Ausgehend von API 23 (Marshmallow) wird die Ressource abc_ic_ab_back_mtrl_am_alpha in abc_ic_ab_back_material geändert.

BEARBEITEN:

Sie können diesen Code verwenden, um die gewünschten Ergebnisse zu erzielen:

toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.blue_gray_15), PorterDuff.Mode.SRC_ATOP);
317
Carles

Wenn Sie die Quelle Toolbar und TintManager betrachten, ist drawable/abc_ic_ab_back_mtrl_am_alpha mit dem Wert des Stilattributs colorControlNormal eingefärbt.

Ich habe versucht, dies in meinem Projekt einzustellen (mit <item name="colorControlNormal">@color/my_awesome_color</item> in meinem Design), aber es ist immer noch schwarz für mich.

Update :

Fand es. Sie müssen das actionBarTheme-Attribut ( nicht actionBarStyle) mit colorControlNormal setzen.

Z.B:

<style name="MyTheme" parent="Theme.AppCompat.Light">        
    <item name="actionBarTheme">@style/MyApp.ActionBarTheme</item>
    <item name="actionBarStyle">@style/MyApp.ActionBar</item>
    <!-- color for widget theming, eg EditText. Doesn't effect ActionBar. -->
    <item name="colorControlNormal">@color/my_awesome_color</item>
    <!-- The animated arrow style -->
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="MyApp.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">       
    <!-- THIS is where you can color the arrow! -->
    <item name="colorControlNormal">@color/my_awesome_color</item>
</style>

<style name="MyApp.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="elevation">0dp</item>      
    <!-- style for actionBar title -->  
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <!-- style for actionBar subtitle -->  
    <item name="subtitleTextStyle">@style/ActionBarSubtitleText</item>

    <!-- 
    the actionBarTheme doesn't use the colorControlNormal attribute
    <item name="colorControlNormal">@color/my_awesome_color</item>
     -->
</style>
186
rockgecko

Alle oben genannten Vorschläge ausprobiert. Die einzige Möglichkeit, die Farbe des Navigationssymbols für den Standard-Zurück-Pfeil in meiner Symbolleiste zu ändern, ist das Festlegen von colorControlNormal im Basisdesign. Wahrscheinlich aufgrund der Tatsache, dass das übergeordnete Element Theme.AppCompat.Light.NoActionBar verwendet 

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
  //the rest of your codes...
</style>
108
Harry Aung

Sie müssen Ihrem Symbolleisten-Design ein einzelnes Attribut hinzufügen. 

<style name="toolbar_theme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="colorControlNormal">@color/arrow_color</item>
</style>

Wenden Sie dieses toolbar_theme auf Ihre Symbolleiste an.

ODER 

sie können direkt auf Ihr Thema anwenden - 

<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/arrow_color</item> 
  //your code ....
</style>
57
Neo

Einfach hinzufügen 

<item name="colorControlNormal">@color/white</item> 

zu Ihrem aktuellen App-Thema.

43
S bruce

Wie in den meisten vorangegangenen Kommentaren gesagt, ist die Lösung hinzuzufügen 

<item name="colorControlNormal">@color/white</item> zu Ihrem App-Design. Bestätigen Sie jedoch, dass in Ihrem Toolbar-Element kein anderes Thema in Ihrem Layout definiert ist.

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

wenn Sie Toolbar verwenden, können Sie dies versuchen

Drawable drawable = toolbar.getNavigationIcon();
drawable.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);
27
longbaobao

Die Antwort von Carles ist die richtige Antwort, aber einige der Methoden wie getDrawable (), getColor () wurden zu dem Zeitpunkt, als ich diese Antwort schreibe, nicht mehr unterstützt. Die aktualisierte Antwort wäre also

Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

Bei einigen anderen Stackoverflow-Abfragen fand ich heraus, dass der Aufruf von ContextCompat.getDrawable () dem von

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

Und ContextCompat.getColor () ist ähnlich 

public static final int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompatApi23.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}

Link 1: ContextCompat.getDrawable ()

Link 2: ContextCompat.getColor ()

10
capt.swag

Ich habe eine Lösung gefunden, die vor Lollipop funktioniert. Stellen Sie "colorControlNormal" in "actionBarWidgetTheme" ein, um die Farbe von homeAsUpIndicator zu ändern. Die Antwort von Rockgecko von oben zu ändern, sieht folgendermaßen aus:

<style name="MyTheme" parent="Theme.AppCompat.Light">        
    <item name="actionBarTheme">@style/MyApp.ActionBarTheme</item>
    <item name="actionBarStyle">@style/MyApp.ActionBar</item>
    <!-- color for widget theming, eg EditText. Doesn't effect ActionBar. -->
    <item name="colorControlNormal">@color/my_awesome_color</item>
    <!-- The animated arrow style -->
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <!-- The style for the widgets on the ActionBar. -->
    <item name="actionBarWidgetTheme">@style/WidgetStyle</item>
</style>

<style name="WidgetStyle" parent="style/ThemeOverlay.AppCompat.Light">
    <item name="colorControlNormal">@color/my_awesome_color</item>
</style>
7
GFred

Auf compileSdkVersoin 25 können Sie Folgendes tun:

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
     <item name="Android:textColorSecondary">@color/your_color</item>
</style>
6
nuttynibbles

Verwenden Sie die Methode unten:

private Drawable getColoredArrow() {
    Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
    Drawable wrapped = DrawableCompat.wrap(arrowDrawable);

    if (arrowDrawable != null && wrapped != null) {
        // This should avoid tinting all the arrows
        arrowDrawable.mutate();
        DrawableCompat.setTint(wrapped, Color.GRAY);
    }

    return wrapped;
}

Jetzt können Sie das Zeichen mit einstellen:

getSupportActionBar().setHomeAsUpIndicator(getColoredArrow());
5
Jumpa

 enter image description here

Ändern Sie die Farbe des Menü-Nav-Symbols

 Final convert Menu Icon Color

In style.xml:

<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="Android:textColor">@color/colorAccent</item>


</style>

<style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@color/colorPrimaryDark</item>
</style>







In Mainfests.xml :

<activity Android:name=".MainActivity"
        Android:theme="@style/MyMaterialTheme.Base"></activity>
5
Sumit Saxena

Eine andere Lösung, die möglicherweise für Sie geeignet ist, besteht darin, die Symbolleiste nicht als Aktionsleiste der App zu deklarieren (durch setActionBar oder setSupportActionBar) und das Rücksymbol in onActivityCreated mit dem in einer anderen Antwort auf dieser Seite erwähnten Code zu setzen

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
toolbar.setNavigationIcon(upArrow);

Jetzt wird der onOptionItemSelected-Rückruf nicht angezeigt, wenn Sie die Zurück-Taste drücken. Sie können sich jedoch mit setNavigationOnClickListener dafür registrieren. Das ist was ich mache: 

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        getActivity().onBackPressed(); //or whatever you used to do on your onOptionItemSelected's Android.R.id.home callback
    }
});

Ich bin nicht sicher, ob es funktioniert, wenn Sie mit Menüelementen arbeiten. 

4
Vinay Wadhwa

versuche dies

public void enableActionBarHomeButton(AppCompatActivity appCompatActivity, int colorId){

    final Drawable upArrow = ContextCompat.getDrawable(appCompatActivity, R.drawable.abc_ic_ab_back_material);
    upArrow.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);

    Android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar();
    mActionBar.setHomeAsUpIndicator(upArrow);
    mActionBar.setHomeButtonEnabled(true);
    mActionBar.setDisplayHomeAsUpEnabled(true);
}

funktionsaufruf:

enableActionBarHomeButton(this, R.color.white);
1
Siddarth Kanted

Wir hatten das gleiche Problem und wollten nur das einstellen 

app: collapseIcon

attribut in der Toolbar am Ende, das wir nicht gefunden haben, da es nicht sehr gut dokumentiert ist :)

<Android.support.v7.widget.Toolbar
         Android:id="@+id/toolbar"
         Android:layout_width="match_parent"
         Android:layout_height="@dimen/toolbarHeight"
         app:collapseIcon="@drawable/collapseBackIcon" />
1
Julian Horst

Sie können die Farbe des Navigationssymbols wie folgt programmgesteuert ändern:

mToolbar.setNavigationIcon(getColoredArrow()); 

private Drawable getColoredArrow() {
        Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        Drawable wrapped = DrawableCompat.wrap(arrowDrawable);

        if (arrowDrawable != null && wrapped != null) {
            // This should avoid tinting all the arrows
            arrowDrawable.mutate();
                DrawableCompat.setTintList(wrapped, ColorStateList.valueOf(this.getResources().getColor(R.color.your_color)));
            }
        }

        return wrapped;
}
0
pks

Ich habe gerade das Symbolleisten-Design in @ style/ThemeOverlay.AppCompat.Light geändert

und der Pfeil wurde dunkelgrau

            <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:gravity="center"
            app:layout_collapseMode="pin"
            app:theme="@style/ThemeOverlay.AppCompat.Light">
0
fullMoon

Einfache Lösung, die für mich funktioniert hat (wenn Sie in der gesamten App dieselbe Pfeilfarbe verwenden müssen):

  1. Speichern Sie das Pfeilsymbol, das Sie verwenden möchten, in dem Zeichenordner (stellen Sie sicher, dass es die gewünschte Farbe hat; Sie können Ihre Farbe in XML ändern, wenn Sie XML-Vektor-Zeichenweise verwenden).

  2. Ordnen Sie dieses neue Pfeilsymbol der Aktionsleiste zu:

    ActionBar actionBar = getSupportActionBar (); ActionBar.setHomeAsUpIndicator (R.drawable.ic_your_icon_here);

0
evanca