You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API33下WebView应用禁用暗色模式失效(MIUI设备)求助

WebView适配Android 13(targetSdk33)后MIUI设备暗色模式失效问题

问题描述

开发WebView应用时,原本通过以下代码禁用暗色模式:

WebSettingsCompat.setForceDark(settings, WebSettingsCompat.FORCE_DARK_OFF);

将targetSdk升级至33后该方法废弃,改用适配代码:

if (SDK_INT >= 33) {
    if (WebViewFeature.isFeatureSupported(WebViewFeature.ALGORITHMIC_DARKENING)) {
        WebSettingsCompat.setAlgorithmicDarkeningAllowed(settings, false);
    }
}else{
    if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
        WebSettingsCompat.setForceDark(settings, WebSettingsCompat.FORCE_DARK_OFF);
    }
}

但安装到小米Redmi 8T(MIUI系统)后,暗色模式仍严重影响应用显示,该应用在Android Studio模拟器中运行正常,仅MIUI设备存在此问题。

已尝试的无效方案

  • 将themes.xml复制到dark/themes.xml目录
  • 在onCreate中添加代码:AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
  • 在themes.xml中添加配置:<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
  • 将主题从Theme.MaterialComponents.DayNight.DarkActionBar改为Theme.MaterialComponents.Light.DarkActionBar
  • 组合使用上述所有方案

解决方案确认与补充思路

你找到的针对MIUI的解决方案是有效的,核心是通过反射绕过MIUI定制WebView的强制暗色逻辑——MIUI会自行添加一套WebView暗色适配规则,不受系统WebView设置的控制。具体实现代码如下:

try {
    Class<?> webViewFactoryClass = Class.forName("android.webkit.WebViewFactory");
    Method getProviderMethod = webViewFactoryClass.getMethod("getProvider");
    Object webViewProvider = getProviderMethod.invoke(null);

    Class<?> webViewProviderClass = Class.forName("android.webkit.WebViewProvider");
    Method getWebViewMethod = webViewProviderClass.getMethod("getWebView");
    Object webView = getWebViewMethod.invoke(webViewProvider);

    Class<?> webViewClass = Class.forName("android.webkit.WebView");
    Field settingsField = webViewClass.getDeclaredField("mSettings");
    settingsField.setAccessible(true);
    Object settings = settingsField.get(webView);

    Class<?> webSettingsClass = Class.forName("android.webkit.WebSettings");
    Field algorithmicDarkeningField = webSettingsClass.getDeclaredField("mAlgorithmicDarkeningAllowed");
    algorithmicDarkeningField.setAccessible(true);
    algorithmicDarkeningField.setBoolean(settings, false);

} catch (Exception e) {
    e.printStackTrace();
}

此外可尝试以下补充思路:

  1. 更新WebView版本:MIUI搭载定制版WebView,将设备上的WebView更新至官方最新版本后重新测试,部分旧版定制WebView的适配bug可能已被修复
  2. 页面层面强制浅色:如果WebView加载的H5页面支持暗色模式,可在页面头部添加<meta name="color-scheme" content="only light">,从页面本身强制锁定浅色模式,规避系统适配逻辑
  3. 验证WebView初始化顺序:确保所有WebView设置(包括暗色模式禁用代码)在调用loadUrl或loadData之前执行,避免加载后设置不生效

内容的提问来源于stack exchange,提问作者Rafail Antoniadis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:05:24