如何强制android webview中的黑色网页?

如何强制android webview中的黑色网页?,android,android-webview,Android,Android Webview,如果我们启用chrome://flags/#enable-强制变暗 android上的chrome浏览器中的标志,则网页变暗 我想在android webview中实现类似的功能(即黑暗的web ui) 目前我正在使用以下代码: private void injectCSS() { String code = "javascript:(function() {" + "var node = doc

如果我们启用chrome://flags/#enable-强制变暗 android上的chrome浏览器中的标志,则网页变暗

我想在android webview中实现类似的功能(即黑暗的web ui)

目前我正在使用以下代码:

  private void injectCSS() {
        
       String code = "javascript:(function() {" +
                 "var node = document.createElement('style');"+
                 "node.type = 'text/css';"+
                   " node.innerHTML = 'body, label,th,p,a, td, tr,li,ul,span,table,h1,h2,h3,h4,h5,h6,h7,div,small {"+
                   "     color: #deFFFFFF;"+
                        "background-color: #232323;"+
                   " } ';"+
                   " document.head.appendChild(node);})();";

        webView.evaluateJavascript(code,null);
     
    }
我在以下位置运行此代码:

    @Override
    public void onProgressChanged(WebView view, final int 
            newProgress) {
              super.onProgressChanged(view, newProgress);
              injectCSS();
             }

    @Override
    public void onPageStarted(final WebView view, String url, 
       Bitmap favicon) {
             injectCSS();
             super.onPageStarted(view, url, favicon);    
      }

   @Override
    public void onPageFinished(WebView view, final String url) 
      {
          injectCSS();
          super.onPageFinished(view, url);
      }
现在,我几乎看到了和chrome一样的黑色网页。但是我想改进这段代码,因为它有一些问题,比如锚链接不能正确显示。建议任何更好的技术(如果可用)

如果您看到更改日志,您可以看到添加到控件中的ForceDark API,如果
WebView
应以暗模式呈现。您可以使用API控制
WebView
变暗(CSS/web内容变暗与自动变暗)

在尝试访问此功能之前,请确保在中使用的Webview支持此功能。为此,类有一个函数,可用于检查给定功能是否受支持。因此,在我们继续设置对暗模式的支持之前,请检查是否支持:

if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { ... }
中有3个不同的常数可供配置-

  • 强制暗显关闭–禁用网络视图的强制暗显模式,这意味着网络视图的内容将按原样呈现
  • 强制暗显启用网络视图的强制暗显模式,这意味着网络视图的内容将始终以暗显主题呈现
  • FORCE_DARK_AUTO–根据父视图的状态为webview启用强制暗模式,这意味着渲染webview内容时将遵循系统暗模式设置
使用函数相应地应用它-

WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)

嘿,这项工作的最低api级别要求是什么?我在emulator上用最少的api 24进行了测试,但它不起作用。那么,是否有任何最低api要求?或者这需要更新哪个emulator没有的webview?您可以注意到,我们使用
WebSettingsCompat
来设置暗模式,这意味着向后兼容。正如我在回答中提到的,WebView环境必须支持它。我在真实的设备上进行了测试,该设备也运行在api 24上,它在那里工作,但在具有api 24系统的emulator上不工作。我认为它需要更新系统webview。此问题的公认答案中有一条注释,说明“setForceDark功能要求在运行的设备上安装Android系统WebView v76或更高版本。”这证实了需要更新系统WebView。是的,我同意你的看法。谢谢你的帮助。