首页 > 解决方案 > 在 Android 模拟器中运行时无法更改 Chrome 自定义选项卡导航栏颜色

问题描述

为 Chrome 自定义标签指定颜色似乎有点不稳定。您可以指定三种颜色:工具栏颜色、“辅助工具栏”颜色和导航栏颜色。

似乎有两种方法可以控制这些。一种是直接在Builder中设置三个属性,像这样:

val builder = CustomTabsIntent.Builder()
builder.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary))
builder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark))
builder.setNavigationBarColor(ContextCompat.getColor(context, R.color.colorPrimary))
val customTabsIntent = builder.build()

另一种是指定参数和方案。有三种可能的方案COLOR_SCHEME_DARKCOLOR_SCHEME_LIGHTCOLOR_SCHEME_SYSTEMCOLOR_SCHEME_SYSTEM,我认为,让系统决定是使用深色还是浅色方案,而其他两个强制使用深色或浅色方案。当您指定参数时,您可以为浅色方案或深色方案设置这些颜色参数(工具栏、辅助工具栏、导航栏)。我认为如果你强制使用暗方案,你会为暗方案指定参数。如果您使用系统方案,那么您可以指定浅色参数和深色参数,并且将根据系统决定使用深色或浅色方案的情况使用适当的值。无论如何,这是我最好的猜测。

一个例子可能如下所示:

val builder = CustomTabsIntent.Builder()
builder.setColorScheme(COLOR_SCHEME_DARK)
val darkParams = CustomTabColorSchemeParams.Builder()
    .setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary))
    .setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark))
    .setNavigationBarColor(ContextCompat.getColor(context, R.color.colorPrimary))
    .build()
builder.setColorSchemeParams(COLOR_SCHEME_DARK, darkParams)
val customTabsIntent = builder.build()

(我尝试了不同的选项来设置配色方案和设置参数使用的方案)。

作为一个有趣的旁注,如果你尝试builder.setColorSchemeParams(COLOR_SCHEME_SYSTEM, params)你会遇到崩溃:java.lang.IllegalArgumentException: Invalid colorScheme: 0. 显然这是一个功能,而不是一个错误。您应该为深色或浅色方案指定颜色参数,而不是系统,它会自动在浅色和深色之间进行选择。

我相信你也可以同时使用这两种方法。仅当无法使用第二种方法(为配色方案设置颜色参数)时,才使用第一种方法(直接在构建器中设置颜色值)。根据文件

为了保持与不支持此 API 的浏览器的兼容性,请提供默认值。

这就是背景信息。这是我的结果。

要更改工具栏颜色,请使用第一种方法 ( builder.setToolbarColor). Easy peasy。但使用第二种方法 ( CustomTabColorSchemeParams) 无济于事。

我实际上还没有测试过“辅助工具栏”。我不确定那是什么。它似乎是一个可选的底部工具栏,尽管它的使用方式已被弃用,取而代之的是RemoteViews. 我认为这与大多数人无关。

这两种方法都不会影响导航栏的颜色。

换个角度看,第二种方法builder.setColorScheme(COLOR_SCHEME_DARK)可以用来强制 Chrome 自定义标签使用浅色方案或深色方案。这似乎工作得很好。但是颜色参数似乎都没有真正影响任何东西。

也许有人可以解释一些这种奇怪的行为,或者确认它是谷歌的错误。或者,也许您可​​以指出我可能做错的事情。我的主要问题是:我如何才能真正更改 Chrome 自定义选项卡的导航栏颜色?正如我所指出的,这些方法似乎不起作用。

标签: androidchrome-custom-tabs

解决方案


更改导航栏颜色适用于物理设备,但不适用于模拟器。


推荐阅读