Como mudar a cor do botão Voltar da Barra de Ferramentas no Android?

104

Não consegui mudar a cor do botão Voltar. Estou usando o material design da barra de ferramentas. No meu aplicativo, estou aplicando o fundo preto da barra de ferramentas, mas o design traseiro é preto por padrão, é por isso que eu só quero mudar a cor deste botão Voltar. Por favor, me dê soluções.

Obrigado

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

Respostas:

82

use este estilo

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/back_button_image</item>
</style>
Akhil Jayakumar
fonte
eu estou usando esse estilo. o que eu tenho que mudar neste estilo?
Nazima Kauser MMF
você pode usar arquivos de imagem personalizados para o botão Voltar. Basta chamá-lo em `@ drawable / your_image '
Akhil Jayakumar
Esta é a melhor forma de o fazer. Porque usar R.drawable.abc_ic_ab_back_mtrl_am_alpha para mudar a cor tem riscos, já que a versão de suporte muda o recurso drawable com frequência.
Mostafa Imran
200

Você pode adicionar um estilo ao seu 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 adicione isso como tema à sua barra de ferramentas no layout.xml da barra de ferramentas usando app: theme , verifique abaixo

<?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
fonte
4
Funcionou como um encanto e parece mais apropriado.
Vijay Kumar Kanta
1
Droga. Funciona. Agora só preciso de algo equivalente para iOS. Obrigado!
Ernesto
Seria melhor chamá-lo ToolbarTheme
Leo Droidcoder
1
Para mim, <style name = "ToolbarTheme" parent = "@ style / Theme.AppCompat.NoActionBar"> funcionou. O meu tema aplicativo principal é <nome do style = pai "AppTheme" = "Theme.AppCompat.NoActionBar">
Yar
3
Funcionou. Isso é mais apropriado do que a resposta aceita.
Domenico
87

Esta é a maneira mais simples de obter Tema claro e escuro para app:themea barra de ferramentas. Você deve alterar o valor da tag da barra de ferramentas

  • Para Título da barra de ferramentas preta e seta para cima preta , sua barra de ferramentas deve implementar o seguinte tema:

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

Título da barra de ferramentas preta e seta para cima

  • Para White Toolbar Title e White Up arrow , sua barra de ferramentas deve implementar o seguinte tema:

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

Título da barra de ferramentas branca e seta para cima

ch3tanz
fonte
68
Para o título branco da barra de ferramentas e a seta branca para cima, use o seguinte tema: android: theme = "@ style / ThemeOverlay.AppCompat.Dark.ActionBar"
Amol Patil
Estou tentando entender, por que se chama ThemeOverlay? Por que não posso usar apenas Theme.AppCompat.Dark.ActionBar aqui?
Gaket
@ ch3tanz Você está usando ActionBar ou Toolbar? Por que você usa estilos ActionBar?
f470071
@ f470071 Estou usando a barra de ferramentas. É só estilo que vai suportar em todas as versões. Você pode usar estilos de Material Design se o seu aplicativo tiver como alvo acima do Lollipop.
ch3tanz
Theme.AppCompat.Light.DarkActionBarNo meu caso.
Evi Song
30

Para o título branco da barra de ferramentas e a seta branca para cima, use o seguinte tema:

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Pankaj Talaviya
fonte
Muito obrigado, acima de tudo resolver só funciona pra mim.
Md Juyel Rana,
23

Usa isto:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>
Sabin Acharya
fonte
5
Isso deve ser aceito. Cada resposta aqui é apenas para substituir o ícone, não sua cor.
Michał Jabłoński
12

Tente isto,

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

Você pode usar o seu próprio ícone usando app:navigationIcone para a cor do títuloapp:titleTextColor

Exemplo:

<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
fonte
Isso funcionou para mim, basta definir qualquer ícone usando esta linhaapp:navigationIcon="@drawable/ic_back_black"
Abhishek
clareira ajudou.
Mohamed Nageh
6

Você não precisa mudar o estilo para isso. Depois de configurar sua barra de ferramentas como barra de ação, você pode codificar assim

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

Mas você não pode mudar a cor da seta para trás por este método

Nevil Ghelani
fonte
6

Se você quiser o botão Voltar branco (←) e o título da barra de ferramentas branca, siga este:

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

Altere o tema de Darkpara Lightse desejar o botão preto Voltar (←) e o título preto da barra de ferramentas.

nhp
fonte
6

Basta usar MaterialToolbare substituir as cores padrão:

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

com:

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

insira a descrição da imagem aqui

Se estiver usando androidx.appcompat.widget.Toolbarou MaterialToolbar com o estilo padrão ( Widget.MaterialComponents.Toolbar), você pode usar:

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

com:

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

Acho que se o tema deve ser gerado algum problema, mas sua seta preta definida dinamicamente. Então, sugerido tente 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
fonte
2
Como sua solução difere de @Parth Bhayani?
CoolMind
3

Estou usando o <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar>tema em meu aplicativo Android e no tema NoActionBar, a colorControlNormalpropriedade é usada para alterar a cor padrão do ícone de navegação Seta do botão Voltar em minha barra de ferramentas

styles.xml

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

Simples e sem preocupações

 <?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>
Null Pointer Exception
fonte
2

Fiz assim usando a biblioteca de componentes de materiais:

<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
fonte
isso funciona: permite que você altere a cor do ícone do menu de hambúrguer.
lnaie
2

Para estilizar a barra de ferramentas no Android 21+ é um pouco 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
fonte
1

Você pode adicionar este código em sua classe java. Mas você deve criar um ativo de vetor antes, para que possa personalizar sua seta de volta.

actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_black_24dp);
Mochamad Fandi
fonte
-1

Se você quiser a cor de fundo do sistema em branco, você pode 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" é a chave

A pasta está na sua atividade onde você deseja mostrar o botão Voltar na barra de ação

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