在 Android 模拟器中 运行 时无法更改 Chrome 自定义选项卡导航栏颜色
Can't change Chrome Custom Tabs navigation bar color when running in the Android Emulator
为 Chrome 自定义标签指定颜色似乎有点不靠谱。您可以指定三种颜色:工具栏颜色、"secondary toolbar" 颜色和导航栏颜色。
似乎有两种方法可以控制这些。一种是直接在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()
另一个是指定params和scheme。存在三种可能的方案:COLOR_SCHEME_DARK
、COLOR_SCHEME_LIGHT
和 COLOR_SCHEME_SYSTEM
。 COLOR_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
。显然这是一个功能,而不是错误。您应该为深色或浅色方案指定颜色参数,而不是系统,它会自动在浅色和深色之间进行选择。
我相信你也可以同时使用这两种方法。只有在无法使用第二种方法(为配色方案设置颜色参数)时,才使用第一种方法(直接在构建器中设置颜色值)。根据documentation、
to maintain compatibility with browsers not supporting this API, do
provide the defaults.
这就是背景信息。这是我的结果。
要更改工具栏颜色,请使用第一种方法 (builder.setToolbarColor)
。简单易行。但使用第二种方法 (CustomTabColorSchemeParams
) 无任何作用。
我还没有实际测试 "secondary toolbar"。我不确定那是什么。它似乎是一个可选的底部工具栏,尽管它的使用方式 deprecated 更倾向于 RemoteViews
。我认为它与大多数人无关。
这两种方法都不影响导航栏颜色。
从另一个角度来看,使用第二种方法,builder.setColorScheme(COLOR_SCHEME_DARK)
可用于强制 Chrome 自定义选项卡使用浅色方案或深色方案。这似乎工作得很好。但是 none 的颜色参数似乎实际上会影响任何东西。
也许有人可以解释一些这种奇怪的行为,或者确认这是一个 Google 错误。或者你可以指出我可能做错的事情。我的主要问题是:如何真正更改 Chrome 自定义选项卡的导航栏颜色?正如我所指出的,这些方法似乎不起作用。
更改导航栏颜色在物理设备上有效,但在模拟器中无效。
您应该尝试使用 setDefaultColorSchemeParams(params)
而不是 setColorSchemeParams(CustomTabsIntent.COLOR_SCHEME_DARK, params)
为 Chrome 自定义标签指定颜色似乎有点不靠谱。您可以指定三种颜色:工具栏颜色、"secondary toolbar" 颜色和导航栏颜色。
似乎有两种方法可以控制这些。一种是直接在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()
另一个是指定params和scheme。存在三种可能的方案:COLOR_SCHEME_DARK
、COLOR_SCHEME_LIGHT
和 COLOR_SCHEME_SYSTEM
。 COLOR_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
。显然这是一个功能,而不是错误。您应该为深色或浅色方案指定颜色参数,而不是系统,它会自动在浅色和深色之间进行选择。
我相信你也可以同时使用这两种方法。只有在无法使用第二种方法(为配色方案设置颜色参数)时,才使用第一种方法(直接在构建器中设置颜色值)。根据documentation、
to maintain compatibility with browsers not supporting this API, do provide the defaults.
这就是背景信息。这是我的结果。
要更改工具栏颜色,请使用第一种方法 (builder.setToolbarColor)
。简单易行。但使用第二种方法 (CustomTabColorSchemeParams
) 无任何作用。
我还没有实际测试 "secondary toolbar"。我不确定那是什么。它似乎是一个可选的底部工具栏,尽管它的使用方式 deprecated 更倾向于 RemoteViews
。我认为它与大多数人无关。
这两种方法都不影响导航栏颜色。
从另一个角度来看,使用第二种方法,builder.setColorScheme(COLOR_SCHEME_DARK)
可用于强制 Chrome 自定义选项卡使用浅色方案或深色方案。这似乎工作得很好。但是 none 的颜色参数似乎实际上会影响任何东西。
也许有人可以解释一些这种奇怪的行为,或者确认这是一个 Google 错误。或者你可以指出我可能做错的事情。我的主要问题是:如何真正更改 Chrome 自定义选项卡的导航栏颜色?正如我所指出的,这些方法似乎不起作用。
更改导航栏颜色在物理设备上有效,但在模拟器中无效。
您应该尝试使用 setDefaultColorSchemeParams(params)
而不是 setColorSchemeParams(CustomTabsIntent.COLOR_SCHEME_DARK, params)