如何在Android中更改工具栏返回按钮的颜色?

135

我无法更改返回按钮的颜色。我正在使用工具栏材料设计。在我的应用程序中,我正在将工具栏的背景设置为黑色,但是默认情况下返回设计也是黑色的,这就是为什么我想要改变这个返回按钮的颜色。请给我解决方案。

谢谢你


3
父项为“Theme.AppCompat.Light.DarkActionBar”的MyMaterialTheme.Base样式。 - Nazima Kauser MMF
20个回答

253

您可以在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>

并将其添加为主题到工具栏布局文件 toolbar layout.xml 中,使用 app:theme。请查看下面的内容。


<?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
非常顺利,听起来最合适。 - Vijay Kumar Kanta
1
该死。它能用了。现在我只需要一个iOS的等效物。谢谢! - Ernesto
1
对我来说,<style name="ToolbarTheme" parent="@style/Theme.AppCompat.NoActionBar">起作用了。我的主应用程序主题是<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">。 - Yar
3
它起作用了。这比被接受的答案更合适。 - Domenico
1
将此属性<item name="colorControlNormal">@color/toolbar_color_control_normal</item>添加到应用程序的主题中对我也有效。您只需要确保工具栏声明使用了应用程序的主题即可。 - Seun Matt
显示剩余2条评论

99

使用这种样式

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

我正在使用这种风格。我需要在这种风格中做出哪些改变? - Nazima Kauser MMF
你可以使用自定义的图像文件作为返回按钮。只需在`@drawable/your_image'中调用它即可。 - Akhil Jayakumar
这是最好的方法。因为使用R.drawable.abc_ic_ab_back_mtrl_am_alpha来改变颜色存在风险,由于支持版本经常更改可绘制资源。 - Mostafa Imran

96
这是实现工具栏 Light 和 Dark 主题最简单的方法。您需要更改工具栏标签的 app:theme 值。
  • 对于 黑色工具栏标题黑色向上箭头,您的工具栏应该采用以下主题:

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

Black Toolbar Title and Up Arrow

  • 对于 白色工具栏标题白色向上箭头,您的工具栏应该采用以下主题:

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

White Toolbar Title and Up Arrow


75
对于白色工具栏标题和白色向上箭头,请使用以下主题:android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"。 - Amol Patil
1
我正在尝试理解,为什么它被命名为ThemeOverlay?为什么我不能在这里使用简单的Theme.AppCompat.Dark.ActionBar? - Gaket
@ch3tanz 你是在使用ActionBar还是Toolbar?为什么要使用ActionBar样式? - f470071
@f470071 我正在使用工具栏。这只是一种样式,适用于所有版本。如果您的应用程序针对Lollipop以上版本,则可以使用Material Design样式。 - ch3tanz
1
在我的情况下,Theme.AppCompat.Light.DarkActionBar - Evi Song

45

使用这个:

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

9
应该被接受。这里的每个答案都只是替换图标,而不是它的颜色。 - Michał Jabłoński
这是整个列表中唯一可行的答案。 - Vijay

40

如需使用白色工具栏标题和白色向上箭头,请使用以下主题:

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

17

试试这个,

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

15

只需使用 MaterialToolbar 并覆盖默认颜色:

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

随着:

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

输入图像描述

如果您正在使用默认样式(Widget.MaterialComponents.Toolbar)的androidx.appcompat.widget.ToolbarMaterialToolbar,您可以使用以下代码:

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

随着:

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

你能给出一个具体的例子,说明你是如何在图像中实现这种颜色的吗? - Just The Highlights

10

你不需要改变样式。在将工具栏设置为操作栏后,您可以像这样编写代码:

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

但是你无法通过这种方法改变返回箭头的颜色


1
非常感谢。这是唯一有效的解决方案! - Sam

7

您可以使用 app:navigationIcon 来使用自己的图标,使用 app:titleTextColor 来设置标题颜色。

例如:

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

这对我来说很有效,只需使用这行代码app:navigationIcon="@drawable/ic_back_black"即可设置任何图标。 - Abhishek
很高兴能够帮助到你。 - Mohamed Nageh
对我没有用。返回按钮或导航图标的颜色保持不变。 - coolcool1994

7

要在Android 21+上设置工具栏的样式有所不同。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接