【发布时间】:2019-12-18 08:48:18
【问题描述】:
我有一个使用 webview 的 Android 应用程序,最近我试图弄清楚如何使用新的 @media (prefers-color-scheme: dark) CSS 语法来添加深色主题。我在我的页面上写了正确的 CSS,如果我在 Chrome 中打开它并打开 Chrome 的暗模式,它就可以工作。我的AppTheme 也继承了Theme.AppCompat.DayNight,当我为设备上的整个操作系统打开暗模式时,我的应用程序会显示暗加载对话框等。甚至<input> 元素的自动完成选项也会变暗。但是,我的 webview 加载的网页仍然没有变暗。根据this page,webviews 应该支持这个功能,但我就是无法让它工作。我在这里错过了什么?
我还刚刚发现在 API 29 中有这个 WebSettings.setForceDark() 方法;会不会是我要找的东西?不过,我希望找到一种适用于较低 API 级别的解决方案。
顺便说一句,我目前的解决方法是注入这样的 JavaScript 接口:
webView.addJavascriptInterface(new JSInterface(), "jsInterface");
...
public class JSInterface {
@JavascriptInterface
public boolean isNightMode() {
int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
return nightModeFlags == Configuration.UI_MODE_NIGHT_YES;
}
}
然后在我的网页中,调用jsInterface.isNightMode()方法并根据结果动态加载不同的CSS文件。它确实可以根据需要对全局暗模式设置做出响应,但我仍然想知道我是否可以让prefers-color-scheme 工作。
【问题讨论】:
-
我的深色模式样式没有得到应用。我正在使用 Cordova,并且正在使用 inappbrowser 插件运行 ASP.NET MVC 应用程序。如何在我的 cordova 应用程序(包括应用程序内浏览器)中禁用暗模式,或使我的 MVC 应用程序中的
prefers-color-scheme: dark设置正常工作? -
我在我的 Cordova 应用程序(包括 MVC 中的 inappbrowser webview 应用程序)中禁用了暗模式,方法是在我的网页的所有布局中的
<head>标签中添加<meta name="color-scheme" content="light dark">。
标签: android css android-studio android-webview android-night-mode