Android ActionBar/Toolbar 颜色在浅色和深色主题中不同

标签 android android-actionbar android-toolbar android-dark-theme android-darkmode

我想了解为什么 ActionBar 在 Light 与 Dark 主题中的样式不同。下面是一个简单的设置屏幕,可以在具有相同主题的浅色和深色主题之间切换。

enter image description here

值\主题.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Dark application theme. -->
    <style name="Theme.SettingsApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/blue_normal</item>
        <item name="colorPrimaryVariant">@color/blue_dark</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <item name="colorSurface">@color/red</item>
        <item name="colorOnSurface">@color/green</item>
    </style>
</resources>

值夜\themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Dark application theme. -->
    <style name="Theme.SettingsApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/blue_normal</item>
        <item name="colorPrimaryVariant">@color/blue_dark</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <item name="colorSurface">@color/red</item>
        <item name="colorOnSurface">@color/green</item>
    </style>
</resources>

值\颜色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="blue_normal">#FF3F7FBF</color>
    <color name="blue_dark">#FF2F6090</color>
    <color name="white">#FFFFFFFF</color>
    <color name="red">#FF0000</color>
    <color name="green">#00FF00</color>
</resources>

在 Light them 中,ActionBar 显示为蓝色和白色,表明它正在使用 colorPrimarycolorOnPrimary。在 Dark 主题中,它显示为红色和绿色,表明它正在使用 colorSurfacecolorOnSurface。为什么这些应用不同,我如何才能在 ActionBar 上获得一致的颜色应用?

最佳答案

Why are these applied differently

引自文档:

large surfaces should not use bright background colors because they can emit too much brightness. When applicable, the Material themes will provide this behavior out-of-the-box, e.g., by having the Light theme default to Widget.MaterialComponents.AppBarLayout.Primary and the Dark theme default to Widget.MaterialComponents.AppBarLayout.Surface.

因此,虽然浅色和深色主题的颜色相同,但 Primary 颜色是浅色模式下的首选颜色,而 surface 颜色是对于暗模式。

how can I get consistent application of colors on the ActionBar?

这可以从之前的文档中得出结论..

因此,您只需要让 values\themes.xml 包含:

  1. colorPrimarycolorSurface 具有相同的值
  2. colorOnPrimarycolorOnSurface 具有相同的值

将此应用于您的示例

values\themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Dark application theme. -->
    <style name="Theme.SettingsApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/blue_normal</item>
        <item name="colorOnPrimary">@color/white</item>
        
        <item name="colorSurface">@color/blue_normal</item>
        <item name="colorOnSurface">@color/white</item>
    </style>
</resources>

了解更多请check documentation .

关于Android ActionBar/Toolbar 颜色在浅色和深色主题中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65673078/

相关文章:

Android 动态功能虽然说已安装,但仍停留在安装 View

java - 创建 BasicClientCookie

android - 如何使用 MediaRecorder 在 Android 中录制原始 AAC 音频文件? AAC_ADTS 不起作用

android - 在 android.support.annotation 中找不到 RequiresApi

android - 操作栏在状态栏后面

android - 如何在仅在特定 fragment 上可见的 ViewPage 操作栏上添加导航列表?

android - 如何将可点击图标添加到 Android Activity 栏的最左角?

java - 如何在Android中将菜单设置为工具栏

java - 使用scrollFlags时自定义工具栏不隐藏

android - NestedWebView 与 ScrollingViewBehavior 一起正常工作