¿Cómo cambiar el color del botón Atrás de la barra de herramientas en Android?

100

No pude cambiar el color del botón de retroceso. Estoy usando el diseño de material de la barra de herramientas. En mi aplicación, estoy aplicando el fondo negro de la barra de herramientas, pero el diseño posterior es negro de forma predeterminada, por eso solo quiero cambiar el color de este botón de retroceso. Por favor, dame soluciones.

Gracias

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

Respuestas:

79

usa este estilo

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/back_button_image</item>
</style>
Akhil Jayakumar
fuente
estoy usando este estilo. ¿Qué tengo que cambiar en este estilo?
Nazima Kauser MMF
Puedes usar archivos de imagen personalizados para el botón Atrás. Solo llámalo en `@ drawable / your_image '
Akhil Jayakumar
Esta es la mejor manera de hacerlo. Porque usar R.drawable.abc_ic_ab_back_mtrl_am_alpha para cambiar de color tiene riesgos, ya que la versión de soporte cambia el recurso dibujable con frecuencia.
Mostafa Imran
196

Puede agregar un estilo a su 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>

y agregue esto como tema a su barra de herramientas en la barra de herramientas layout.xml usando la aplicación: tema , verifique a continuación

<?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
fuente
4
Funcionó a las mil maravillas y suena más apropiado.
Vijay Kumar Kanta
1
Maldito. Funciona. Ahora solo necesito algo equivalente para iOS. ¡Gracias!
Ernesto
Sin embargo
Leo Droidcoder
1
Para mi <style name = "ToolbarTheme" parent = "@ style / Theme.AppCompat.NoActionBar"> funcionó. Mi tema principal aplicación es <nombre de estilo = padre "AppTheme" = "Theme.AppCompat.NoActionBar">
Yar
3
Funcionó. Esto es más apropiado que la respuesta aceptada.
Domenico
86

Esta es la forma más sencilla de lograr un tema claro y oscuro para app:themela barra de herramientas. Debe cambiar el valor de la etiqueta de la barra de herramientas.

  • Para el título de la barra de herramientas negra y la flecha negra hacia arriba , la barra de herramientas debe implementar el siguiente tema:

aplicación: theme = "@ style / ThemeOverlay.AppCompat.Light"

Título de la barra de herramientas negra y flecha hacia arriba

  • Para el título blanco de la barra de herramientas y la flecha blanca hacia arriba , su barra de herramientas debe implementar el siguiente tema:

aplicación: theme = "@ style / ThemeOverlay.AppCompat"

Título de la barra de herramientas blanca y flecha hacia arriba

ch3tanz
fuente
66
Para el título blanco de la barra de herramientas y la flecha blanca hacia arriba, use el siguiente tema: android: theme = "@ style / ThemeOverlay.AppCompat.Dark.ActionBar"
Amol Patil
Estoy tratando de entender, ¿por qué se llama ThemeOverlay? ¿Por qué no puedo usar solo Theme.AppCompat.Dark.ActionBar aquí?
Gaket
@ ch3tanz ¿Estás usando ActionBar o Toolbar? ¿Por qué utiliza los estilos ActionBar?
f470071
@ f470071 Estoy usando la barra de herramientas. Es solo el estilo que apoyará en todas las versiones. Puede usar estilos de Material Design si su aplicación se orienta por encima de Lollipop.
ch3tanz
Theme.AppCompat.Light.DarkActionBaren mi caso.
Evi Song
30

Para el título blanco de la barra de herramientas y la flecha blanca hacia arriba, utilice el siguiente tema:

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Pankaj Talaviya
fuente
Muchas gracias, sobre todo la solución solo funciona para mí.
Md Juyel Rana
20

Utilizar esta:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>
Sabin Acharya
fuente
5
Esto debería aceptarse. Cada respuesta aquí es solo para reemplazar el ícono, no su color.
Michał Jabłoński
12

Prueba esto,

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

No tienes que cambiar de estilo. Después de configurar su barra de herramientas como barra de acción, puede codificar así

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

Pero no puede cambiar el color de la flecha hacia atrás con este método

Nevil Ghelani
fuente
6

Si desea un botón de retroceso blanco (←) y un título de barra de herramientas blanco, siga esto:

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

Cambie el tema de Darka Lightsi desea el botón de retroceso negro (←) y el título de la barra de herramientas negro.

nhp
fuente
5

Puede utilizar su propio icono utilizando app:navigationIcony para el color del título.app:titleTextColor

Ejemplo:

<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
fuente
Esto funcionó para mí, simplemente establezca cualquier ícono usando esta líneaapp:navigationIcon="@drawable/ic_back_black"
Abhishek
claro que ayudó.
Mohamed Nageh
5

Simplemente use MaterialToolbary anule los colores predeterminados:

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

ingrese la descripción de la imagen aquí

Si está usando androidx.appcompat.widget.Toolbaro MaterialToolbar con el estilo predeterminado ( Widget.MaterialComponents.Toolbar), puede usar:

<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>
Gabriele Mariotti
fuente
4

Creo que si el tema se debe generar algún problema, pero su flecha negra configurada dinámicamente, sugiero que intente con este.

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
fuente
2
¿En qué se diferencia tu solución de @Parth Bhayani?
CoolMind
3

Estoy usando el <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar>tema en mi aplicación de Android y en el tema NoActionBar, la colorControlNormalpropiedad se usa para cambiar el color del icono de navegación predeterminado Flecha del botón Atrás en mi barra de herramientas

styles.xml

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

Simple y sin preocupaciones

 <?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>
Excepción de puntero nulo
fuente
2

Lo hice de esta manera usando la biblioteca de Componentes de materiales:

<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
fuente
esto funciona: le permite cambiar el color del icono del menú de hamburguesas.
lnaie
1

Puede agregar este código a su clase java. Pero debe crear un activo de vector antes, para que pueda personalizar su flecha hacia atrás.

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

Para diseñar la barra de herramientas en Android 21+ es un poco diferente.

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

Si desea que el color de fondo del sistema sea blanco, puede usar este código

<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" es clave

La pasta está en su actividad donde desea mostrar el botón de retroceso en la barra de acción

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