web-dev-qa-db-fra.com

Comment changer la couleur de l'icône de la barre d'outils d'accueil

J'utilise Android.support.v7.widget.Toolbar et j'ai appris de cet article comment changer la couleur de l'icône de hamburger en blanc, mais la flèche haut/arrière reste sombre lorsque j'appelle

setDisplayHomeAsUpEnabled(true);

Comment puis-je rendre la flèche blanche aussi?

Voici à quoi ressemble ma barre d'outils lorsque j'appelle setDisplayHomeAsUpEnabled ():

enter image description here

... et voici la partie pertinente de mon fichier styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">#194C5F</item>
    <item name="colorAccent">@color/accent</item>
    <item name="drawerArrowStyle">@style/WhiteDrawerIconStyle</item>
</style>

    <style name="WhiteDrawerIconStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@Android:color/white</item>
    </style>
87
Joshua W

Je l'ai résolu en éditant styles.xml:

<style name="ToolbarColoredBackArrow" parent="AppTheme">
    <item name="Android:textColorSecondary">INSERT_COLOR_HERE</item>
</style>

... en faisant ensuite référence au style dans la définition de la barre d'outils dans l'activité:

<LinearLayout
    Android:id="@+id/main_parent_view"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <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"
        app:theme="@style/ToolbarColoredBackArrow"
        app:popupTheme="@style/AppTheme"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:minHeight="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"/>
207
Joshua W

Voici ce que vous recherchez. Mais cela change également la couleur de radioButton, etc. Vous pouvez donc utiliser un thème pour cela.

<item name="colorControlNormal">@color/colorControlNormal</item>
44
osrl

Je l'ai résolu par programme en utilisant ce code: 

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

Révision 1:

À partir de l'API 23 (Marshmallow), la ressource pouvant être dessinée abc_ic_ab_back_mtrl_am_alpha est remplacée par abc_ic_ab_back_material.

35
PayToPwn

Cette réponse est peut-être trop tardive, mais voici comment je le fais . Créez toolbar.xml avec le code suivant.

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar 
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:local="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:background="?attr/colorPrimary"
Android:layout_alignParentTop="true"
Android:layout_gravity="bottom"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

et dans le styles.xml

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!--
    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

Enfin, incluez la barre d’outils dans le layout

<include
        Android:id="@+id/toolbar"
        layout="@layout/toolbar" />
14
Tuss
   <!-- ToolBar -->
    <style name="ToolBarTheme.ToolBarStyle"    parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="Android:textColorPrimary">@Android:color/white</item>
        <item name="Android:textColor">@color/white</item>
        <item name="Android:textColorPrimaryInverse">@color/white</item>
    </style>

Trop tard pour poster, cela a fonctionné pour moi de changer la couleur du bouton de retour

6
sreekumar

Eh bien, il existe un moyen plus facile de le faire

drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.open_drawer, R.string.close_drawer);
arrow = drawerToggle.getDrawerArrowDrawable();

Et alors

arrow.setColor(getResources().getColor(R.color.blue);
5
Kammaar

Changez le thème de votre barre d’outils en ThemeOverlay.AppCompat.Dark

<?xml version="1.0" encoding="utf-8"?>
<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/navigation"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/colorPrimary"
    Android:orientation="vertical"
    app:theme="@style/ThemeOverlay.AppCompat.Dark">

</Android.support.v7.widget.Toolbar>

et le mettre en activité 

mToolbar = (Toolbar) findViewById(R.id.navigation);
setSupportActionBar(mToolbar);
3
Mayank Jain

Ce code fonctionne pour moi:

public static Drawable changeBackArrowColor(Context context, int color) {
    String resName;
    int res;

    resName = Build.VERSION.SDK_INT >= 23 ? "abc_ic_ab_back_material" : "abc_ic_ab_back_mtrl_am_alpha";
    res = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());

    final Drawable upArrow = context.getResources().getDrawable(res);
    upArrow.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

    return upArrow;
}

...

getSupportActionBar().setHomeAsUpIndicator(changeBackArrowColor(this, Color.rgb(50, 50, 50)));               
supportInvalidateOptionsMenu();

De même, si vous souhaitez modifier la couleur du texte de la barre d’outils:

Spannable spannableString = new SpannableString(t);
spannableString.setSpan(new ForegroundColorSpan(Color.rgb(50, 50, 50)), 0, t.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
toolbar.setText(spannableString);

Travailler de API 19 à 25.

2
Herman

Au lieu de changer de style, ajoutez simplement ces deux lignes de code à votre activité.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.arrowleft);
0
Shiva Kanumala

Au lieu d'utiliser les anciens identifiants " abc_ic_ab_back_material ", utilisez le nouveau abc_ic_ab_back_material dans chaque version de l'API. Je l'ai testé en 19, 21, 27 et fonctionne bien avec le code et la configuration ci-dessous.

  • minSdkVersion = 17
  • targetSdkVersion = 26
  • compileSdkVersion = 27

    public static Drawable changeBackArrowColor(Context context, int color) {
    int res;
    res = context.getResources().getIdentifier("abc_ic_ab_back_material", "drawable", context.getPackageName());
    if (res == 0)
        return null;
    final Drawable upArrow = ContextCompat.getDrawable(context, res);
    upArrow.setColorFilter(ContextCompat.getColor(context, color), PorterDuff.Mode.SRC_ATOP);
    
    return upArrow;
    

    }

0
Narender Gusain