我遵循了关于这个超级有用的答案的说明,https://stackoverflow.com/a/61643614/704836和WebView
实现了黑暗模式,但是当我使用AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
时,WebSettingsCompat.FORCE_DARK_AUTO
似乎不起作用,这让我相信文档讨论的是设置暗模式的另一种方式?
这里的文档https://developer.android.com/reference/androidx/webkit/WebSettingsCompat#FORCE_DARK_AUTO说:
启用强制暗取决于WebView父视图的状态。如果WebView父视图被自动强制使变暗(@参阅android.view.View#setForceDarkAllowed),则WebView内容将被呈现,以模拟一个黑暗的主题。没有附加到视图层次结构的WebViews不会倒置。
我尝试过webView.setForceDarkAllowed(true)
和android:forceDarkAllowed="true"
在父布局和WebView
上,但这并没有帮助。但是,一旦我转到WebSettingsCompat.FORCE_DARK_ON
,它就开始工作了。
那么我如何使用FORCE_DARK_AUTO
呢?
谢谢。
发布于 2020-07-31 12:17:34
安卓力量黑暗和安卓DayNight主题是两个不同的特点。
由于一些无法解释的原因,WebKit/WebView开发人员决定将webview的FORCE_DARK_AUTO
设置链接到Android功能,但不链接到推荐的DayNight功能
正如您所说的,您的应用程序使用的是DayNight主题。因此,Android10ForceDark功能在您的应用程序中是禁用的,并且您的work视图上的FORCE_DARK_AUTO
设置无法工作。
因此,要为您的for视图启用自动暗模式切换,您需要检查您的DayNight主题正在运行的模式,然后相应地启用或禁用for视图上的暗模式:
if(WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
//Theme is switched to Night/Dark mode, turn on webview darkening
WebSettingsCompat.setForceDark(myWebView.getSettings(), WebSettingsCompat.FORCE_DARK_ON);
}
else{
//Theme is not switched to Night/Dark mode, turn off webview darkening
WebSettingsCompat.setForceDark(myWebView.getSettings(), WebSettingsCompat.FORCE_DARK_OFF);
}
}
虽然不推荐,但如果你仍然想放弃你的DayNight主题支持,并启用原力黑暗快速修复,你可以阅读一些一般信息的安卓10的力量黑暗功能下面。
安卓10强制黑暗功能
是在Android 10 (API 29)中引入的一个特性。它允许任何使用纯光主题的应用程序或活动,因此它本身不支持暗模式,当设备在黑暗模式下运行时,会自动被系统变暗。
由于您无法控制此特性如何将暗模式应用于您的活动和组件,因此建议只在需要“快速修复”来实现暗模式时才使用它。如果您想在应用程序中正确地实现暗模式,则需要使用暗主题或自动切换DayNight主题。
要为您的应用程序启用强制黑暗,它需要:
ancestor)
<item name="android:forceDarkAllowed">true</item>
<item name="isLightTheme">true</item>
或为主题设置<item name="isLightTheme">true</item>
),或者compileSdkVersion
(可能还有targetSdkVersion
)设置为至少29。
大多数系统和AndroidX光主题(如android:Theme.Material.Light
或Theme.MaterialComponents.Light
)在默认情况下都应该设置light主题属性,因此创建这样的主题继承应该会启用强制黑暗:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<!-- Other properties here-->
<item name="android:forceDarkAllowed">true</item>
</style>
然后将该主题应用于Android清单中的应用程序(或单个活动)。
<application
...
android:theme="@style/AppTheme">
</application>
这将为您设置主题的整个应用程序或活动启用强制黑暗。默认情况下,默认情况下,它中的所有视图都启用了暗强制。通过设置android:forceDarkAllowed="false"
,您可以从强制黑暗中选择退出个人视图。
https://stackoverflow.com/questions/62938269
复制相似问题