首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何强制使WebView父级变暗,以便我可以使用WebSettingsCompat.FORCE_DARK_AUTO?

如何强制使WebView父级变暗,以便我可以使用WebSettingsCompat.FORCE_DARK_AUTO?
EN

Stack Overflow用户
提问于 2020-07-16 15:35:28
回答 1查看 2.1K关注 0票数 5

我遵循了关于这个超级有用的答案的说明,https://stackoverflow.com/a/61643614/704836WebView实现了黑暗模式,但是当我使用AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)时,WebSettingsCompat.FORCE_DARK_AUTO似乎不起作用,这让我相信文档讨论的是设置暗模式的另一种方式?

这里的文档https://developer.android.com/reference/androidx/webkit/WebSettingsCompat#FORCE_DARK_AUTO说:

启用强制暗取决于WebView父视图的状态。如果WebView父视图被自动强制使变暗(@参阅android.view.View#setForceDarkAllowed),则WebView内容将被呈现,以模拟一个黑暗的主题。没有附加到视图层次结构的WebViews不会倒置。

我尝试过webView.setForceDarkAllowed(true)android:forceDarkAllowed="true"在父布局和WebView上,但这并没有帮助。但是,一旦我转到WebSettingsCompat.FORCE_DARK_ON,它就开始工作了。

那么我如何使用FORCE_DARK_AUTO呢?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-31 12:17:34

安卓力量黑暗和安卓DayNight主题是两个不同的特点。

  • Force Dark是指系统自动将“只亮”的应用程序转换为黑暗模式的应用程序。这意味着作为一个快速修复光的应用程序,以“支持”黑暗模式。如果您的应用程序不是光的,并且已经支持昼夜/黑暗模式,则不应该(而且基本上不能)使用此功能。

  • Android DayNight主题是一种混合主题,根据系统主题或日夜模式设置,自动在它们的光照和黑暗版本之间切换。这是实现暗模式的推荐方法。

由于一些无法解释的原因,WebKit/WebView开发人员决定将webview的FORCE_DARK_AUTO设置链接到Android功能,但不链接到推荐的DayNight功能

正如您所说的,您的应用程序使用的是DayNight主题。因此,Android10ForceDark功能在您的应用程序中是禁用的,并且您的work视图上的FORCE_DARK_AUTO设置无法工作。

因此,要为您的for视图启用自动暗模式切换,您需要检查您的DayNight主题正在运行的模式,然后相应地启用或禁用for视图上的暗模式:

代码语言:javascript
运行
复制
if(WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {

   int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;

   if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
       //Theme is switched to Night/Dark mode, turn on webview darkening
       WebSettingsCompat.setForceDark(myWebView.getSettings(), WebSettingsCompat.FORCE_DARK_ON);
   }
   else{
      //Theme is not switched to Night/Dark mode, turn off webview darkening
      WebSettingsCompat.setForceDark(myWebView.getSettings(), WebSettingsCompat.FORCE_DARK_OFF);
   }
}

虽然不推荐,但如果你仍然想放弃你的DayNight主题支持,并启用原力黑暗快速修复,你可以阅读一些一般信息的安卓10的力量黑暗功能下面。

安卓10强制黑暗功能

是在Android 10 (API 29)中引入的一个特性。它允许任何使用纯光主题的应用程序或活动,因此它本身不支持暗模式,当设备在黑暗模式下运行时,会自动被系统变暗。

由于您无法控制此特性如何将暗模式应用于您的活动和组件,因此建议只在需要“快速修复”来实现暗模式时才使用它。如果您想在应用程序中正确地实现暗模式,则需要使用暗主题或自动切换DayNight主题。

要为您的应用程序启用强制黑暗,它需要:

ancestor)

  • <item name="android:forceDarkAllowed">true</item>
  • 使用或继承光主题(需要为主题设置<item name="isLightTheme">true</item>或为主题设置<item name="isLightTheme">true</item>),或者
    • 需要将build.gradle中的compileSdkVersion (可能还有targetSdkVersion)设置为至少29

大多数系统和AndroidX光主题(如android:Theme.Material.LightTheme.MaterialComponents.Light)在默认情况下都应该设置light主题属性,因此创建这样的主题继承应该会启用强制黑暗:

代码语言:javascript
运行
复制
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
        <!-- Other properties here-->

        <item name="android:forceDarkAllowed">true</item>
</style>

然后将该主题应用于Android清单中的应用程序(或单个活动)。

代码语言:javascript
运行
复制
<application
    ...
    android:theme="@style/AppTheme">
</application>

这将为您设置主题的整个应用程序或活动启用强制黑暗。默认情况下,默认情况下,它中的所有视图都启用了暗强制。通过设置android:forceDarkAllowed="false",您可以从强制黑暗中选择退出个人视图。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62938269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档