- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为我的 Android 应用开发夜间模式。我正在使用 ContextCompat.getColor 以编程方式为某些 UI 元素获取颜色,但是这种方法无法获取正确的颜色。当应用程序处于夜间模式时,遵循夜间资源限定符,ContextCompat 从 values/colors.xml 而不是 values-night/colors.xml 中获取颜色。
奇怪的是,如果我从 Activity 调用 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)));
相反,如果我从 Activity 中的 Fragment 调用 ContextCompat.getColor,它会返回错误的颜色
//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)));
我正在使用“androidx.appcompat:appcompat:1.0.2”库
不知道是不是和this bug有关
我希望您能找到解决方案或至少是解决方法,例如从特定配置的资源中获取颜色(如果可能)。
最佳答案
解决了问题,但我来这里是为了帮助其他有同样问题的人。
奇怪的行为是由 Webview 引起的。如 this link 所述,当你第一次打开一个 Webview 然后交换一个 fragment 或向 UI 添加新 View 时,它们会使用错误的颜色,而不尊重夜间主题。如果您以编程方式获取颜色,也会出现同样的问题。我尝试了一些解决方法,例如重新创建 Activity 或使资源缓存无效,它们实际上解决了问题,但它们在性能方面确实很糟糕。
升级到 androidx.appcompat:appcompat:1.1.0-rc01 至少部分解决了这个问题。如果您有一些未定义颜色的 View ,无论是在应用程序的主题中还是在布局 xml 中,那么在第一次启动 web View 然后更改 fragment 时,它们仍然会出现故障并使用错误的颜色。因此,您应该使用夜间颜色的资源变体 (-night) 来定义应用程序主题中 View 的每种颜色。如果您这样做, View 将遵循您的主题并使用正确的颜色
长话短说
升级到androidx.appcompat:appcompat 1.1.0-rc01或最新
检查是否还有问题
如果是,则为您尚未在主题或 xml 中定义颜色的每个 View 设置颜色,对深色主题使用 -night 变体
关于java - ContextCompat.getColor 方法忽略夜间模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57779661/
我有一个模型,其中一位设置者期望得到 Color Resource但在未解析资源的情况下无法直接使用该资源(通过使用 ContextCompat )。 有没有办法可以注释我的方法来指示/限制这一点?
代码: backgroundColor = typedArray.getColor(R.styleable.TapBarMenu_tbm_backgroundColor, ContextCompat.
我根据另一篇文章在 setOnClickListener 中使用它 here 像这样: start.setOnClickListener(new View.OnClickListener() {
我目前正在使用 ContextCompat.getColor,但它没有获取正确的颜色。当应用程序遵守夜间资源限定符时,ContextCompat 从 values/colors.xml 而不是 val
当我为 SlidingTabLayout 对象设置颜色时出现错误。这是我的 mainActivity,首先我发现 getResource.getColor 已被弃用。所以我使用了 contextCom
目前我有以下方法来检查 Marshmallow 的 AppCompatActivity 中的运行时权限: if(Build.VERSION.SDK_INT > Build.VERSION_CODES.
我正在尝试用 ContextCompat.GetColor 替换 Resources.GetColor,但最后一个不返回颜色,我不知道我应该使用什么来代替 Resources.GetColor(从 A
我想知道什么时候在应用程序中使用 ContextCompact 类。基本上它的用途是什么以及何时使用它?我读过开发者网站,它说 ContextCompact 是“访问 Context 中的功能的助手”
我正在为我的 Android 应用开发夜间模式。我正在使用 ContextCompat.getColor 以编程方式为某些 UI 元素获取颜色,但是这种方法无法获取正确的颜色。当应用程序处于夜间模式时
我正在尝试使运行时权限向后兼容旧设备,但使用支持库我无法在 ContextCompat 类中找到 checkSelfPermission() 静态调用,但其记录为 here 这是我的项目 gradle
在我的 android 应用程序(minSdkVersion 15)中,我必须创建目录并将文件写入其中。在我的 AppManifest 中,我正在使用: 在创建目录或文件之前,我正在检查是否允许或
TL,博士; ContextCompat.getColor()不使用夜间颜色(values-night/colors.xml),但在启用夜间模式时应该使用。 这是问题: 大家好, 所以我正在为我的 A
我正在使用 Google Vision OCR 从名片(OCR 图形 Activity )中获取电子邮件,并将其发送到 SendEmail Activity 中的“收件人”目的地。我的日志显示已检测到
这是一段代码,用于请求访问设备中精确位置的权限。 if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_
一切正常,但在 Android Studio 中显示以下错误 代码运行但无法获得函数、类等的建议 谢谢 最佳答案 我遇到了与您完全相同的问题...升级到 3.1.2/3 并变得一团糟。 尝试以下方法从
更新 Android Studio 后,我发现我的项目中有一些红色行。 我有什么。 我调用这个方法: if (Build.VERSION.SDK_INT < 21) { orangeProgr
在 Android M 中,我看到 getColor(int id) 被替换为 ContextCompat.getColor(Context context, int id)。 我刚开始接触 Andr
嗨,我在 Eclipse 中有一个旧项目,当我尝试像这样检查SelfPermission时: ContextCompat.checkSelfPermission(this, Manifest.per
ContextCompat.getExternalFilesDirs(context, null)说: Returns absolute paths to application-specific d
我正在尝试检查 Android Marshmallow 中用户授予/撤销的权限。不幸的是,ContextCompat.checkSelfPermission()(它是 Context.checkCal
我是一名优秀的程序员,十分优秀!