Android DarkMode 策略选择不适用于 Cordova(首选颜色方案)

问题描述 投票:0回答:1

我正在使用 Cordova for Android 应用程序。我在 CordovaWebView 上加载一个网页,其中暗模式 css 定义为 @media(prefers-color-scheme)。 Android 不尊重网页深色方案。 (

<head> has <meta name="color-scheme" content="dark light">
)

Android 支持两种 DarkMode 策略。

  • 颜色反转(DARK_STRATEGY_USER_AGENT_DARKENING_ONLY)
  • 网页方案(DARK_STRATEGY_WEB_THEME_DARKENING_ONLY)

Android 可以让您使用此代码决定暗模式策略

if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) { WebSettingsCompat.setForceDarkStrategy(webView.getSettings(), WebSettingsCompat.DARK_STRATEGY_WEB_THEME_DARKENING_ONLY); }
但是它似乎不适用于 Cordova WebView。 (我用 WebView 测试了这段代码。它工作正常)。

我在这里缺少什么?这是 Cordova Bug 吗?我在

Cordova Github Bug Report 上找到了一些东西。但我没有找到任何解决方案。

android cordova webview cordovawebview
1个回答
0
投票
在解决类似问题后,我在

https://github.com/hanscappelle/android-darkmode-example 制作了一个示例项目。这就是我为了支持黑暗模式+让用户在应用程序中更改模式所做的。

使用支持深色模式的主题

第一步是为您的应用程序使用完全支持深色模式的主题。您通常从基本主题开始,名称中带有

Light

 的主题是特定的浅色主题,需要更多步骤才能使其正常工作(请参阅下文)。现在,选择一个名称中带有 
DayNight
 的主题作为您的应用主题的父主题。

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
有关暗模式支持的主题的更多信息

https://m2.material.io/develop/android/theming/dark

如果您正在寻找上述主题所需的依赖项:

implementation("com.google.android.material:material:1.10.0")
检查您的网页内容是否支持深色模式

要使网页内容支持暗模式,您需要以下 css:

@media (prefers-color-scheme: dark)
项目中的 

webapp

 文件夹中提供了完整的 html 示例。您还可以使用 firebase 托管的示例应用程序进行快速测试 
https://darkmode-example.web.app/

可选择允许用户选择模式

通过上述步骤,您应该已经让您的应用程序和 Web 视图根据设备上的系统设置以深色或浅色模式渲染内容。

为了允许用户否决您应用程序的此设置,您需要提供一些触发此设置的设置(对于 API 级别 31 及以上):

@RequiresApi(Build.VERSION_CODES.S) private fun forceMode(mode: int) { val uiManager = getSystemService(UI_MODE_SERVICE) as UiModeManager uiManager.setApplicationNightMode(mode) }
请注意,

UiModeManager.MODE_NIGHT_NO

模式将强制使用灯光模式。使用 
UiModeManager.MODE_NIGHT_YES
 强制使用深色模式,并且 
UiModeManager.MODE_NIGHT_AUTO
 再次使用系统范围主题。

示例项目包含较低 API 级别的代码(使用

AppCompatDelegate.setDefaultNightMode<=30) also where the

方法代替。加上不同的模式!所以请仔细检查导入。

可选择坚持

Light
基本主题

如果您出于某种原因想坚持使用浅色主题,还可以选择强制使用深色模式,但默认情况下,即使系统设置为深色,它也会将所有内容作为浅色主题处理。

有关如何解决此问题的更多信息

https://developer.android.com/develop/ui/views/theming/darktheme#force-dark

© www.soinside.com 2019 - 2024. All rights reserved.