当目标为Android 33时,WebSettingsCompat.setAlgorithmicDarkeningAllowed不起作用

dxxyhpgq  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(474)

我将项目的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。
如果能得到支持就太好了

4urapxun

4urapxun1#

我们已在项目中修复了此问题。我们必须将isLightTheme属性添加到应用主题。如果不添加此属性,Web视图将始终以浅色显示内容。表示要设置的浅色主题

<style name="Theme.WebView" parent="android:Theme.Material.Light.NoActionBar">
    <item name="android:isLightTheme">true</item>
</style>

你的黑暗主题可以是

<style name="Theme.WebView" parent="android:Theme.Material.Light.NoActionBar">
    <item name="android:isLightTheme">false</item>
</style>

如果你的目标是一个比29更老的sdk,你需要在values-v29文件夹中引入新的主题文件。

相关问题