我将项目的targetSdk更新为33,并将webkit更新为1.6.0。在迁移指南(https://developer.android.com/about/versions/13/behavior-changes-13#webview-color-theme)中,提到要将已弃用的setForceDark
更改为setAlgorithmicDarkeningAllowed
。对我来说,这并不像预期的那样工作。Web视图中的Web内容总是以浅色模式显示。
我尝试了几种方法,最后得到了这个简单的合成视图
class SimpleComposeWebView : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
WebViewComposeTheme {
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = {
WebView(this@SimpleComposeWebView).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
webViewClient = WebViewClientCompat()
setupContentTheming()
loadUrl("https://google.com")
}
},
)
}
}
}
}
fun WebView.setupContentTheming() {
if ((resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES) {
if (isFeatureSupported(WebViewFeature.ALGORITHMIC_DARKENING)) {
WebSettingsCompat.setAlgorithmicDarkeningAllowed(settings, true)
} else if (isFeatureSupported(WebViewFeature.FORCE_DARK)) {
@Suppress("DEPRECATION")
WebSettingsCompat.setForceDark(settings, WebSettingsCompat.FORCE_DARK_ON)
}
}
}
这在运行Android 32的模拟器上效果很好,但在Android 33上就不行了。网页显示在亮模式下,而不是暗模式。即使模拟器设置为暗模式。isFeatureSupported(WebViewFeature.ALGORITHMIC_DARKENING)
在Android 32模拟器上返回false。
如果能得到支持就太好了
1条答案
按热度按时间4urapxun1#
我们已在项目中修复了此问题。我们必须将isLightTheme属性添加到应用主题。如果不添加此属性,Web视图将始终以浅色显示内容。表示要设置的浅色主题
你的黑暗主题可以是
如果你的目标是一个比29更老的sdk,你需要在values-v29文件夹中引入新的主题文件。