如何在android webview中强制使用深色网页?

Cha*_*kar 5 android android-webview

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

我想在 android webview 中实现类似的东西(即暗网 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);
     
    }
Run Code Online (Sandbox Code Playgroud)

我在以下位置运行此代码:

    @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);
      }
Run Code Online (Sandbox Code Playgroud)

现在我接近与 chrome 相同的深色网页。但我想改进这段代码,因为它有一些问题,比如锚链接不能正确显示。建议任何更好的技术(如果有)

Ano*_*p M 3

如果您看到androidx.webkit:webkit:1.3.0-beta01更改日志,您可以看到添加了 ForceDark API 以控制是否WebView应在黑暗模式下渲染。您可以使用ForceDarkStrategyAPI 来控制WebView变暗(CSS/Web 内容变暗与自动变暗)。

\n

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

\n
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { ... }\n
Run Code Online (Sandbox Code Playgroud)\n

有 3 个不同的常量可供WebSettingsCompat配置 -

\n
    \n
  • FORCE_DARK_OFF \xe2\x80\x93 禁用 webview 的强制黑暗模式,这意味着 webview 的内容将按原样渲染
  • \n
  • FORCE_DARK_ON \xe2\x80\x93 为 webview 启用强制深色模式,这意味着 webview 的内容将始终以深色主题渲染
  • \n
  • FORCE_DARK_AUTO \xe2\x80\x93 根据父视图的状态为WebView启用强制深色模式,这意味着在渲染WebView的内容时将遵循系统深色模式设置。
  • \n
\n

使用setForceDark函数相应地应用它-

\n
WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)\n
Run Code Online (Sandbox Code Playgroud)\n