当前位置: 首页 > 知识库问答 >
问题:

GetColor方法忽略夜间模式

苏星宇
2023-03-14

我正在为我的Android应用程序工作夜间模式。我使用ContextCompat.getColor以编程方式为一些UI元素获取颜色,但是这个方法并没有获取正确的颜色。当应用程序处于夜间模式时,因此遵循夜间资源限定符,ContextCompat从values/colors.xml中获取颜色,而不是从values-night/colors.xml中获取颜色。

奇怪的是,如果我从一个活动中调用contextcompat.getColor,它会返回正确的颜色

//get Actual Theme Colors
String bgColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(this, R.color.dialogBackground)));
String txtColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(this, R.color.dialogText)));

//get Actual Theme Colors
bgColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(getActivity(),R.color.dialogBackground)));
txtColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(getActivity(),R.color.dialogText)));

我希望您能找到一个解决方案,或者至少是一个变通方法,比如从特定配置的资源中获得getColor(如果可能的话)。

共有1个答案

桂志诚
2023-03-14

解决了问题,但我在这里是为了帮助其他有同样问题的人。

奇怪的行为是由WebView引起的。正如本链接所述,当您第一次打开Webview,然后交换一个片段或向UI添加新视图时,它们将使用错误的颜色,而不尊重夜间主题。如果以编程方式获得颜色,也会出现同样的问题。我尝试了一些变通方法,例如重新创建活动或无效资源缓存,它们实际上解决了问题,但它们在性能方面确实很糟糕。

升级到AndroidX.appcompat:appcompat:1.1.0-RC01至少部分修复了这个问题。如果您有一些视图没有定义颜色,无论是在应用程序的主题中还是在布局xml中,那么当第一次启动webview时,它们仍然会出现故障并使用错误的颜色,然后更改Fragment。因此,您应该在应用程序的主题中定义视图的每种颜色,使用夜间颜色的资源变量(-night)。如果这样做,视图将遵循您的主题并使用正确的颜色

如果是,则为未在主题或xml中定义颜色的每个视图设置颜色,对dark主题使用-night变体

 类似资料:
  • 现在我们提供一个夜间模式,你只需要在 body 或者 .page 或者 .content 上加上 .theme-dark。它和其中所有子元素都会变成夜间模式。你也可以单独给 .bar 加上 .theme-dark,这样可以单独使标题栏或者工具栏变成夜间模式。 夜间模式最大的区别是他的背景变成了黑色,而前景色变成了白色。 夜间模式还处在测试阶段,可能会有某些组件在夜间模式下显示不正常。有任何问题都可

  • 获取设备夜间模式 接口说明 获取设备夜间模式 示例代码: Swift: RokidMobileSDK.device.getNightMode(device: RKDevice, completion: @escaping (_ error: RKError?, _ nightMode: SDKDeviceNightMode?) -> Void) Objc: RKDevice * device

  • 获取设备夜间模式 接口说明 获取设备夜间模式 参数说明 字段 类型 必须? 说明 deviceId String 是 设备ID 示例代码: String deviceId = "XXXXXX"; RokidMobileSDK.device.getNightMode(deviceId, new IGetDeviceNightMode() { @Override

  • 有没有一种方法可以忽略使用mapstruct在此代码示例中第三种方法的映射器的生成?

  • 问题内容: 这个问题本质上是相反的这一个 我有这样的方法: 当我加载它时,Hibernate抱怨我没有称为的属性。但是我不想要一个叫做-我不需要存储数据的属性-这仅仅是逻辑。 hibernate状态: org.hibernate.PropertyNotFoundException:在com.mycomp.myclass类中找不到空置属性的设置器… 我可以在方法中添加注释以使Hibernate忽略它

  • 本文向大家介绍Android夜间模式最佳实践,包括了Android夜间模式最佳实践的使用技巧和注意事项,需要的朋友参考一下 由于Android的设置中并没有夜间模式的选项,对于喜欢睡前玩手机的用户,只能简单的调节手机屏幕亮度来改善体验。目前越来越多的应用开始把夜间模式加到自家应用中,没准不久google也会把这项功能添加到Android系统中吧。 业内关于夜间模式的实现,有两种主流方案,各有其利弊