如何获取通知下拉背景颜色,并在启用夜间模式时确定最佳文本颜色?

2024-04-23

最近,我的用户向我发送了以下屏幕截图,当时启用了 Android 9.0 Pie 与 Android 操作系统夜间模式。

正如您所看到的,股票名称不可见,因为股票名称采用了黑色。在正常的白色主题中,它应该如下所示


这是我用来突出显示文本颜色的代码。在我的代码中,我总是假设下拉通知的背景是白色的。 (如果启用了深色模式,则这是不正确的)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="NotificationTitle" parent="android:TextAppearance.Material.Notification.Title"></style>
</resources>


public SpannableString getFallBelowSpannableString(Context context) {
    if (fallBelowSpannableString != null) {
        return fallBelowSpannableString;
    }

    if (fallBelow == null) {
        return null;
    }

    // The attributes you want retrieved
    int[] attrs = {android.R.attr.textColor};
    TypedArray ta = context.obtainStyledAttributes(R.style.NotificationTitle, attrs);
    int textColor;
    try {
        textColor = ta.getColor(0, context.getResources().getColor(R.color.notification_symbol_name));
    } finally {
        ta.recycle();
    }

    final String notificationMessage = context.getString(R.string.falls_below_template, symbol, org.yccheok.jstock.watchlist.Utils.toStockPrice(fallBelow));
    fallBelowSpannableString = new SpannableString(notificationMessage);
    ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(textColor);
    fallBelowSpannableString.setSpan(foregroundColorSpan, 0, symbol.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    return fallBelowSpannableString;
}

我想知道,启用夜间模式时如何获取通知下拉背景颜色并确定最佳文本颜色?


我认为您可以使用 UiModeManager 类来获取当前模式。尽管无法确定用户在“自动”模式下是否处于黑暗模式。让我们看一下代码 -

UiModeManager uiModeManager = (UiModeManager) c.getSystemService(Context.UI_MODE_SERVICE);
    int modeType = uiModeManager.getNightMode(); 

您还可以从下面的代码中进行模式输入 -

int currentNightMode = getResources().getConfiguration().uiMode
        & Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
    case Configuration.UI_MODE_NIGHT_NO:
        // Night mode is not active, we're in day time
    case Configuration.UI_MODE_NIGHT_YES:
        // Night mode is active, we're at night!
    case Configuration.UI_MODE_NIGHT_UNDEFINED:
        // We don't know what mode we're in, assume notnight
}

之后,您可以根据模式更改文本颜色。但我找到了另一种替代方法来完成你的工作。就像根据模式改变你的资源风格一样,就像在你的资源/值/themes.xml file-

<style name="Theme.AppCompat.DayLight" 
       parent="Theme.AppCompat.Light" />

还有另一个文件res/values-night/themes.xml -

<style name="Theme.AppCompat.Night" 
       parent="Theme.AppCompat.DayNight" />

您可以尝试不同的属性,例如唯一的Theme.AppCompat代替Theme.AppCompat.DayNight。实际上我没有运行这段代码,但似乎只需进行一些更改即可工作。 请在安卓上查看一下文档 https://developer.android.com/reference/android/app/UiModeManager, this https://stackoverflow.com/questions/41391404/how-to-get-appcompatdelegate-current-mode-if-default-is-autostackoverflow问题和这个媒体blog https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取通知下拉背景颜色,并在启用夜间模式时确定最佳文本颜色? 的相关文章

  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • Gradle 构建错误:内存不足

    当我使用 gradle 构建时 它失败并显示以下信息 OpenJDK 64 Bit Server VM warning INFO os commit memory 0x0000000788800000 89128960 0 failed e
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其
  • 使用一个 apk 安装两个应用程序

    我有 2 个应用程序 1 内容提供者 2 使用此 ContentProvider 的应用程序 我需要使用单个 apk 文件安装这 2 个应用程序 我想在 Eclipse 中同时推送这两个应用程序 如果我将另一个项目添加到一个应用程序的构建路
  • 导入已经创建的sqlite数据库(xamarin)

    我正在使用 Xamarin 想知道如何导入我已经创建的 sqlite 数据库 到目前为止 我已将其添加到资产文件夹中 但不知道下一步从哪里开始 string localPath Path Combine System Environment
  • API29 上不推荐使用 setColorFilter

    我使用以下行来更改 VectorDrawable 的颜色 mydrawable getBackground setColorFilter color PorterDuff Mode SRC ATOP 这很好用 尽管它现在已被弃用 文档建议我
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • Android中如何检测WIFI连接何时建立?

    我需要检测何时通过 WIFI 建立网络连接 发送什么广播来确定已建立有效的网络连接 我需要验证是否存在有效的 HTTP 网络连接 我应该监听什么以及需要进行哪些额外测试才能知道是否存在有效连接 您可以注册一个BroadcastReceive
  • 如何在 NumberPicker 中一次显示 3 个以上的值

    我正在创建一个数字选择器 如下图所示 但如果有可用空间 我想显示 3 个以上的值 该选择器有 20 个项目 并且有足够的空间来显示 3 个以上的值 这可以使用 NumberPicker 来完成吗 只需以编程方式设置numberPicker
  • 如何从android中的外部存储中获取所选文件的文件路径?

    我在选择文件的文件路径时遇到问题 我搜索了整个堆栈溢出 但问题没有解决 从设备中选择文件的代码如下所示 Intent intent new Intent Intent ACTION GET CONTENT intent setType in
  • 适用于 Android 的 Google 云端硬盘\文档 API

    我在几个小时内将 Dropbox 与我的应用程序集成 因为 SDK 描述清晰并且有很好的使用示例 Google Drive 似乎只有一个 一刀切 的 Gdata SDK 它非常重 有很多依赖项 它使我的应用程序的大小增加了三倍 而且不是很直
  • TextInputLayout 对于在 EditText 中以编程方式给出提示没有效果

    我有一个 EditText 它的父级是 TextInputLayout 我试图以编程方式为 EditText 提供提示 不在布局中 在这种情况下 文本输入提示动画不起作用 它像简单的 EditText 一样工作 有人可以建议如何处理它吗 下
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • Flash 对象未显示在phonegap android 中

    我已经在 android 手机间隙创建了一个应用程序 我有一个屏幕 我想显示一个静态 flash obj 所以我在屏幕 HTML 页面中放入了以下代码
  • 为什么带处理程序的连续自动对焦相机不允许切换相机闪光灯?

    到目前为止我所做的 我已经实现了用于读取二维码的自定义相机 需要继续聚焦相机以获得更好的二维码读取 我的问题当我使用处理程序每 秒聚焦一次时 相机闪光灯开 关按钮不起作用 或者打开和关闭相机闪光灯需要太多时间 当我删除每秒自动对焦相机的代码
  • 我应该如何在 Android 上使用 Retrofit 处理“无互联网连接”

    我想处理没有互联网连接的情况 通常我会运行 ConnectivityManager cm ConnectivityManager context getSystemService Context CONNECTIVITY SERVICE N

随机推荐

  • 从 Selenium IDE 将测试导出为 python

    我在 Selenium IDE 中进行了几次测试 并将其保存为 HTML 格式的测试套件 该测试套件可以很好地导入回 selenium IDE 但是现在我想使用 python 扩展这些测试 当我单击导出测试套件并选择 python 时 我收
  • 使对象不可调用

    在 JavaScript 中 函数是可调用的 我可以从函数中删除此属性 只留下普通对象吗 var foo function foo callable false pseudocode foo foo is not a function 我可
  • Spring Integration 将路径变量和帖子主体结合到有效负载表达式中

    使用 http 入站网关 我可以使用 SPEL 指定有效负载表达式 该表达式将访问 header requestParams 和 pathVariables 如何同时包含 POST 中的正文 我目前拥有的一个例子是
  • 将 tar.gz 转换为 zip

    我的 Ubuntu 网络服务器上有大量 gzip 压缩档案 我需要将它们转换为 zip 我认为这可以通过脚本来完成 但是我应该使用什么语言 以及如何解压缩和重新压缩文件 我会用一个bash 1 单行 for f in tar gz do r
  • 任务编辑文档预览组件Alfresco

    第一个问题 我想以工作流程任务编辑的形式实现文档预览 我该怎么做 我尝试去适应document details xml and document details ftl to workflow details xml and workflo
  • R 中按值传递

    当尝试调用 grid arrange 将多个图放在同一个 ggplot2 图上时 我首先构建一个我想要的图的列表 然后我构建相应的参数列表来调用 grid arrange 如所解释的在上一个问题中 https stackoverflow c
  • 使用登录名签出 svn+ssh

    我想从存储库中签出一些内容 但是我输入 svn co svn ssh URL 我被要求输入密码 我想他使用的用户名来自我的控制台 但两者不一样 那么我如何使用不同的登录名使用 svn ssh 签出某些内容呢 SSH 允许您在连接 URL 中
  • 通过python从netCDF中提取特定位置的数据

    我是 Python 的新手 也是 NetCDF 的新手 如果我不清楚 请道歉 我有一个包含多个变量的 nc 文件 我需要以新的顺序从这些 nc 文件中提取数据 我的 nc 文件有 8 个变量 经度 纬度 时间 u10 v10 swh mwd
  • 如何“安装”Action Bar Sherlock?

    我正在尝试使用 Action Bar Sherlock 构建示例项目 Action Bar Styled 我在这里下载包含 ABS 的 zip 文件http actionbarsherlock com http actionbarsherl
  • ReactJS onclick 添加或删除类到另一个元素

    我正在努力将我的普通 jQuery 代码转换为 React JS 我是 React 新手 我有以下代码 add click function nav addClass show remove click function nav remov
  • 如何将单个部分中的 Sphinx 章节分成不同的文件?

    我正在使用出色的 Sphinx 工具来创建一些文档 并且我试图通过将同一部分的章节分成单独的文件来保持代码库的模块化形式 请参阅此处了解 章节 和 部分 的定义 http www sphinx doc org en stable rest
  • Homestead 给出 404 Not Found

    我正在尝试启动并运行 Homestead 2 0 以用于 Laravel 的本地开发 我跟着Laracast https laracasts com lessons say hello to laravel homestead two 但我
  • 画布已被跨源数据本地图像污染

    这个问题已经被问了很多次 但我只是不明白为什么这种情况会发生在我身上 基本上 我有一个画布和一个图像 当我尝试这样做时 var canvas document getElementById somecanvas var ctx canvas
  • 使用 NodeJS 和 Restify 重定向客户端

    我正在使用 NodeJS Restify 和 PassportJS 为 SPA 构建 REST 后端以进行身份 验证 除了最后一步之外 一切正常 即将客户端从后端 login facebook callback 重定向到应用程序的主页 我在
  • Ninject + ASP.NET MVC + InRequestScope

    我的 Ninject 有问题 我的绑定规则 this Bind
  • 从搜索中排除文件夹,但不从项目列表中排除

    我有几个不同的项目具有相同的core 我需要的只是将所有非当前项目标记为excluded以避免搜索它们 简单搜索 shift cmd n 等 换句话说 我想获得以下搜索结果core current project 有什么办法吗close一些
  • Angular:如何以法语格式显示日期

    我是 Angular 初学者 我阅读了 Angular 的文档 对于这样一个基本的事情来说很难 我希望我的应用程序中的日期和其他内容具有法语区域设置 而不是默认的 en US 我开始阅读这篇 Angular文档 https angular
  • 在 showModalBottomSheet 外部单击时,如何控制传递给 Navigator.pop() 的内容?

    我启动一个模态底部工作表 然后使用返回的数据作为其未来 var modalFuture showModalBottomSheet modalFuture then data Use data 我通过以下方式从模态小部件返回数据 Naviga
  • 为什么不允许 constexpr 局部变量作为默认函数参数?

    我想我明白为什么 C 不允许local变量作为默认函数参数 int main auto local 1024 auto lambda auto arg1 local illegal use of local variable as defa
  • 如何获取通知下拉背景颜色,并在启用夜间模式时确定最佳文本颜色?

    最近 我的用户向我发送了以下屏幕截图 当时启用了 Android 9 0 Pie 与 Android 操作系统夜间模式 正如您所看到的 股票名称不可见 因为股票名称采用了黑色 在正常的白色主题中 它应该如下所示 这是我用来突出显示文本颜色的