Comment changer la couleur du bouton de retour de la barre d'outils sous Android?

100

Je ne pouvais pas changer la couleur du bouton de retour. J'utilise la conception matérielle de la barre d'outils. Dans mon application, j'applique un arrière-plan noir de la barre d'outils, mais la conception du dos est noire par défaut, c'est pourquoi je veux simplement changer la couleur de ce bouton de retour. Veuillez me donner des solutions.

Merci

Nazima Kauser MMF
la source
3
<style name = "MyMaterialTheme.Base" parent = "Theme.AppCompat.Light.DarkActionBar">
Nazima Kauser MMF

Réponses:

79

utiliser ce style

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/back_button_image</item>
</style>
Akhil Jayakumar
la source
j'utilise ce style. qu'est-ce que je dois changer dans ce style?
Nazima Kauser MMF
vous pouvez utiliser des fichiers d'image personnalisés pour le bouton de retour.Appelez-le simplement dans `@ drawable / your_image '
Akhil Jayakumar
C'est la meilleure façon de le faire. Parce que l'utilisation de R.drawable.abc_ic_ab_back_mtrl_am_alpha pour changer de couleur comporte des risques, car la version de support change fréquemment la ressource dessinable.
Mostafa Imran
196

Vous pouvez ajouter un style à votre styles.xml,

<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
  <!-- Customize color of navigation drawer icon and back arrow --> 
  <item name="colorControlNormal">@color/toolbar_color_control_normal</item>
</style>

et ajoutez-le comme thème à votre barre d'outils dans la barre d'outils layout.xml en utilisant app: theme , vérifiez ci-dessous

<?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:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:theme="@style/ToolbarTheme" >
</android.support.v7.widget.Toolbar>
Rajen Raiyarela
la source
4
A travaillé comme un charme, et semble le plus approprié.
Vijay Kumar Kanta
1
Zut. Ça marche. Maintenant, j'ai juste besoin de quelque chose d'équivalent pour iOS. Merci!
Ernesto
Il vaudrait mieux l'appeler ToolbarTheme
Leo Droidcoder
1
Pour moi, <style name = "ToolbarTheme" parent = "@ style / Theme.AppCompat.NoActionBar"> a fonctionné. Le thème principal de mon application est <style name = "AppTheme" parent = "Theme.AppCompat.NoActionBar">
Yar
3
Ça a marché. C'est plus approprié que la réponse acceptée.
Domenico
86

Voici le moyen le plus simple d'obtenir un thème clair et foncé pour app:themela barre d'outils: vous devez modifier la valeur de la balise Toolbar

  • Pour le titre de la barre d'outils noire et la flèche vers le haut , votre barre d'outils doit implémenter le thème suivant:

app: theme = "@ style / ThemeOverlay.AppCompat.Light"

Titre de la barre d'outils noire et flèche vers le haut

  • Pour le titre de la barre d'outils blanche et la flèche blanche vers le haut , votre barre d'outils doit implémenter le thème suivant:

app: theme = "@ style / ThemeOverlay.AppCompat"

Titre de la barre d'outils blanche et flèche vers le haut

ch3tanz
la source
66
Pour le titre de la barre d'outils blanche et la flèche blanche vers le haut, utilisez le thème suivant: android: theme = "@ style / ThemeOverlay.AppCompat.Dark.ActionBar"
Amol Patil
J'essaie de comprendre, pourquoi s'appelle-t-il ThemeOverlay? Pourquoi ne puis-je pas utiliser simplement Theme.AppCompat.Dark.ActionBar ici?
Gaket
@ ch3tanz Utilisez-vous ActionBar ou Toolbar? Pourquoi utilisez-vous les styles ActionBar?
f470071
@ f470071 J'utilise la barre d'outils. C'est juste le style qui sera pris en charge dans toutes les versions. Vous pouvez utiliser des styles de conception de matériaux si votre application cible au-dessus de Lollipop.
ch3tanz
Theme.AppCompat.Light.DarkActionBardans mon cas.
Evi Song
30

Pour le titre de la barre d'outils blanche et la flèche blanche vers le haut, utilisez le thème suivant:

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Pankaj Talaviya
la source
Merci beaucoup, surtout la solution ne fonctionne que pour moi.
Md Juyel Rana
20

Utilisez ceci:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>
Sabin Acharya
la source
5
Cela devrait être accepté. Chaque réponse ici est juste de remplacer l'icône, pas sa couleur.
Michał Jabłoński
12

Essaye ça,

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);
Parth Bhayani
la source
6

Vous n'avez pas à changer de style pour cela. Après avoir configuré votre barre d'outils en tant que barre d'action, vous pouvez coder comme ceci

android.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
android.getSupportActionBar().setHomeAsUpIndicator(R.drawable.back);
//here back is your drawable image

Mais vous ne pouvez pas changer la couleur de la flèche arrière par cette méthode

Nevil Ghelani
la source
6

Si vous voulez un bouton de retour blanc (←) et un titre de barre d'outils blanc, procédez comme suit:

<android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </android.support.design.widget.AppBarLayout>

Changez le thème de Darkà Lightsi vous voulez un bouton de retour noir (←) et un titre de barre d'outils noir.

nhp
la source
5

Vous pouvez utiliser votre propre icône en utilisant app:navigationIconet pour la couleur du titreapp:titleTextColor

Exemple:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@color/colorPrimary"
        app:navigationIcon="@drawable/ic_arrow_back_white_24dp"
        app:titleTextColor="@color/white" />
Mohamed Nageh
la source
Cela a fonctionné pour moi, il suffit de définir n'importe quelle icône en utilisant cette ligneapp:navigationIcon="@drawable/ic_back_black"
Abhishek
clairière cela a aidé.
Mohamed Nageh
4

Je pense que si le thème doit être généré, un problème, mais sa flèche noire est définie de manière dynamique.Je suggère donc d'essayer celui-ci.

Drawable backArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
backArrow.setColorFilter(getResources().getColor(R.color.md_grey_900), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(backArrow);
siddharth patel
la source
2
En quoi votre solution diffère-t-elle de @Parth Bhayani?
CoolMind
4

Utilisez simplement le MaterialToolbaret remplacez les couleurs par défaut:

    <com.google.android.material.appbar.MaterialToolbar
        style="@style/Widget.MaterialComponents.Toolbar.Primary"
        android:theme="@style/MyThemeOverlay_Toolbar"
        ..>

avec:

  <style name="MyThemeOverlay_Toolbar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- color used by navigation icon and overflow icon -->
    <item name="colorOnPrimary">@color/...</item>
  </style>

entrez la description de l'image ici

Si vous utilisez le androidx.appcompat.widget.Toolbarou le MaterialToolbar avec le style par défaut ( Widget.MaterialComponents.Toolbar), vous pouvez utiliser:

<androidx.appcompat.widget.Toolbar
    android:theme="@style/MyThemeOverlay_Toolbar2"

avec:

  <style name="MyThemeOverlay_Toolbar2" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- This attributes is used by title -->
    <item name="android:textColorPrimary">@color/white</item>

    <!-- This attributes is used by navigation icon and overflow icon -->
    <item name="colorOnPrimary">@color/secondaryColor</item>
  </style>
Gabriele Mariotti
la source
3

J'utilise le <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar>thème dans mon application Android et dans le thème NoActionBar,colorControlNormal propriété est utilisée pour changer la couleur de l'icône de navigation par défaut Flèche du bouton Retour dans ma barre d'outils

styles.xml

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/your_color</item> 
</style>
Lecteur Android_Shreeya
la source
2

Simple et sans soucis

 <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:titleTextColor="@color/white"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/testing" />

    </android.support.design.widget.CoordinatorLayout>
Exception de pointeur nul
la source
2

Je l'ai fait de cette façon en utilisant la bibliothèque de composants matériels:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="drawerArrowStyle">@style/AppTheme.DrawerArrowToggle</item>
</style>

<style name="AppTheme.DrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@android:color/white</item>
</style>
Sam
la source
cela fonctionne: cela vous permet de changer la couleur de l'icône du menu hamburger.
lnaie
1

Vous pouvez ajouter ce code dans votre classe java. Mais vous devez créer un élément vectoriel avant, afin de pouvoir personnaliser votre flèche en arrière.

actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_black_24dp);
Mochamad Fandi
la source
0

Pour styliser la barre d'outils sur Android 21+, c'est un peu différent.

<style name="DarkTheme.v21" parent="DarkTheme.v19">
        <!-- toolbar background color -->
        <item name="android:navigationBarColor">@color/color_primary_blue_dark</item>
        <!-- toolbar back button color -->
        <item name="toolbarNavigationButtonStyle">@style/Toolbar.Button.Navigation.Tinted</item>
    </style>

    <style name="Toolbar.Button.Navigation.Tinted" parent="Widget.AppCompat.Toolbar.Button.Navigation">
        <item name="tint">@color/color_white</item>
    </style>
Pedro Romão
la source
-1

Si vous voulez la couleur du dos du système en blanc, vous pouvez utiliser ce code

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:elevation="0dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar_notification"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            app:contentInsetStartWithNavigation="0dp">

            <include layout="@layout/action_bar_notification" />
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

Remarque: - android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" est la clé

Le collage est dans votre activité où vous souhaitez afficher le bouton de retour sur la barre d'action

final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_notification);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
iamkdblue
la source