Come cambiare il colore del pulsante Indietro della barra degli strumenti in Android?


100

Non sono riuscito a cambiare il colore del pulsante Indietro. Sto usando il material design della barra degli strumenti. Nella mia app sto applicando lo sfondo nero della barra degli strumenti, ma il design posteriore è nero per impostazione predefinita, ecco perché voglio solo cambiare il colore di questo pulsante Indietro. Per favore, dammi soluzioni.

Grazie


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

Risposte:


79

usa questo stile

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/back_button_image</item>
</style>

Sto usando questo stile. cosa devo cambiare in questo stile?
Nazima Kauser MMF

puoi usare file immagine personalizzati per il pulsante Indietro. chiamalo semplicemente in "@ drawable / your_image"
Akhil Jayakumar,

Questo è il modo migliore per farlo. Perché l'utilizzo di R.drawable.abc_ic_ab_back_mtrl_am_alpha per cambiare colore comporta dei rischi, poiché la versione di supporto cambia frequentemente la risorsa disegnabile.
Mostafa Imran

196

Puoi aggiungere uno stile al tuo 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>

e aggiungilo come tema alla barra degli strumenti in layout.xml della barra degli strumenti utilizzando app: tema , controlla di seguito

<?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>

4
Ha funzionato come un incantesimo e suona più appropriato.
Vijay Kumar Kanta

1
Dannazione. Funziona. Ora ho solo bisogno di qualcosa di equivalente per iOS. Grazie!
Ernesto

Sarebbe meglio chiamarlo ToolbarTheme però
Leo Droidcoder

1
Per me <style name = "ToolbarTheme" parent = "@ style / Theme.AppCompat.NoActionBar"> ha funzionato. Il tema principale della mia app è <style name = "AppTheme" parent = "Theme.AppCompat.NoActionBar">
Yar

3
Ha funzionato. Questo è più appropriato della risposta accettata.
Domenico

86

Ecco il modo più semplice per ottenere un tema chiaro e scuro per Toolbar. Devi modificare il valore del app:themetag Toolbar

  • Per Black Toolbar Title e Black Up arrow , la tua barra degli strumenti dovrebbe implementare il seguente tema:

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

Titolo nero della barra degli strumenti e freccia su

  • Per il titolo bianco della barra degli strumenti e la freccia su bianco , la barra degli strumenti dovrebbe implementare il seguente tema:

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

Titolo bianco della barra degli strumenti e freccia su


66
Per il titolo bianco della barra degli strumenti e la freccia bianca su, usa il seguente tema: android: theme = "@ style / ThemeOverlay.AppCompat.Dark.ActionBar"
Amol Patil

Sto cercando di capire, perché si chiama ThemeOverlay? Perché non posso usare solo il semplice Theme.AppCompat.Dark.ActionBar qui?
Gaket

@ ch3tanz Stai usando ActionBar o Toolbar? Perché usi gli stili ActionBar?
f470071

@ f470071 Sto usando Toolbar. È solo lo stile che supporterà in tutte le versioni. Puoi utilizzare gli stili di Material Design se la tua app ha come target superiore a Lollipop.
ch3tanz

Theme.AppCompat.Light.DarkActionBarnel mio caso.
Evi Song

30

Per il titolo bianco della barra degli strumenti e la freccia bianca su, usa il seguente tema:

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

Grazie mille, soprattutto la soluzione funziona solo per me.
Md Juyel Rana

20

Usa questo:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>

5
Questo dovrebbe essere accettato. Ogni risposta qui è solo per sostituire l'icona, non è il colore.
Michał Jabłoński

12

Prova questo,

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);

6

Non devi cambiare stile per questo. Dopo aver impostato la barra degli strumenti come barra delle azioni, puoi codificare in questo modo

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

Ma non puoi cambiare il colore della freccia indietro con questo metodo


6

Se desideri il pulsante Indietro bianco (←) e il titolo bianco della barra degli strumenti, segui questo:

<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>

Cambia tema da Darka Lightse desideri il pulsante Indietro nero (←) e il titolo della barra degli strumenti nero.


5

Puoi usare la tua icona usando app:navigationIcone per il colore del titoloapp:titleTextColor

Esempio:

<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" />

Questo ha funzionato per me basta impostare qualsiasi icona usando questa lineaapp:navigationIcon="@drawable/ic_back_black"
Abhishek

glade ha aiutato.
Mohamed Nageh

4

Penso che se il tema dovesse essere generato qualche problema ma la sua freccia nera impostata dinamicamente.Quindi ho suggerito di provare questo.

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);

2
In che modo la tua soluzione differisce da @Parth Bhayani?
CoolMind

4

Basta usare MaterialToolbare sovrascrivere i colori predefiniti:

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

con:

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

inserisci qui la descrizione dell'immagine

Se stai usando il androidx.appcompat.widget.Toolbaro il MaterialToolbar con lo stile predefinito ( Widget.MaterialComponents.Toolbar) puoi usare:

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

con:

  <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>

3

Sto usando il <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar>tema nella mia applicazione Android e nel tema NoActionBar, la colorControlNormalproprietà viene utilizzata per cambiare il colore dell'icona di navigazione predefinita Freccia del pulsante Indietro nella mia barra degli strumenti

styles.xml

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/your_color</item> 
</style>

2

Semplice e senza preoccupazioni

 <?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>

2

L'ho fatto in questo modo usando la libreria Material Components:

<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>

funziona: ti permette di cambiare il colore dell'icona del menu dell'hamburger.
lnaie

1

Puoi aggiungere questo codice nella tua classe java. Ma devi prima creare una risorsa vettoriale, in modo da poter personalizzare la freccia indietro.

actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_black_24dp);

0

Lo stile della barra degli strumenti su Android 21+ è leggermente diverso.

<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>

-1

Se desideri che il colore del sistema sia di nuovo in bianco, puoi utilizzare questo codice

<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>

Nota:- android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" è la chiave

La pasta si trova nella tua attività in cui desideri mostrare il pulsante Indietro sulla barra delle azioni

final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_notification);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.