转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/122882722
本文出自【赵彦军的博客】

最近接到一个做护眼模式的需求,要求是在Android App 全局,在任何一个页面都显示。

在做需求之前要先弄清楚几个概念

蓝光

短波蓝光是波长处于400nm-480nm之间具有相对较高能量的光线。该波长内的蓝光会使眼睛内的黄斑区毒素量增高,严重威胁我们的眼底健康。蓝光诱发致盲眼病,最有效的解决方案是对电视进行贴膜处理。防蓝光贴膜技术已经很成熟,成本很低,可以有效阻止蓝光穿透。

在这里,特别提出一点,蓝光并不都是有害蓝光,真正有害的是波长400到450以内的蓝光,而480到500纳米之间的蓝光有一种调整生物节律的作用,睡眠、情绪、记忆力等都与之相关,对人体反而是有益的。而且短波蓝光是不是一定会对人眼产生伤害,这与照射强度与照射时间有关,当照度达到一定程度后,持续两个小时以上,才有可能对视网膜产生损害。

护眼模式

简单来说,就是把屏幕发出的光,过滤掉对人体有害的蓝光,就是护眼模式。

实现原理

第一个问题,怎么过滤蓝光。

    /*** 过滤蓝光,过滤蓝光比例,一般传30*/private fun calculateFilterColor(blueFilterPercent: Int = 30): Int {var realFilter = blueFilterPercentif (realFilter < 10) {realFilter = 10} else if (realFilter > 80) {realFilter = 80}val a = (realFilter / 80f * 180).toInt()val r = (200 - realFilter / 80f * 190).toInt()val g = (180 - realFilter / 80f * 170).toInt()val b = (60 - realFilter / 80f * 60).toInt()return Color.argb(a, r, g, b)}

Activity 怎么设置蓝光,也很简单就是 在 decorView 增加一个前景色

//过滤蓝光,获取对眼睛健康的颜色
val color = calculateFilterColor()
activity.window.decorView.foreground = ColorDrawable(color)

那么怎么运用到所有的 activity ,一种思路是在 BaseActivity onResume 方法,统一设置护眼模式。但是有个问题,有些 activity 是在第三方 sdk 中,并不会继承我们的 BaseActivity 。 我选择的方案是,在 Application 里注册监听器。如下:

class App : Application() {override fun onCreate() {super.onCreate()registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {override fun onActivityResumed(activity: Activity) {val color = UtilBlueEye.calculateFilterColor()activity.window.decorView.foreground = ColorDrawable(color)}})}
}

这样就能运用到所有的 Activity。

怎么关闭蓝光呢? 同样的套路,在 decorView 增加一个透明前景色。

//关闭蓝光
activity.window.decorView.foreground = ColorDrawable(Color.TRANSPARENT)

上面都是针对单个 activity 设置护眼,如何对单独的 View 设置?也是超级简单,对 view 设置前景色即可,代码如下:

val color = UtilBlueEye.calculateFilterColor()
view.foreground = ColorDrawable(color)

activity 设置了护眼模式,并不会影响到 Dialog 上,如何处理 Dialog 的护眼模式,也是很简单。

val color = UtilBlueEye.calculateFilterColor()
dialog.window?.decorView?.foreground = ColorDrawable(color)

好了,护眼模式做完了,关电脑,下班回家。

Android如何实现全局的护眼模式相关推荐

  1. android项目小说阅读开发背景颜色,Android 小说阅读护眼模式

    Android 小说阅读护眼模式 实现方案:采用全局dialog 覆盖APP  悬浮在 其他APP之上,给dialog设置护眼色值 自定义护眼模式dialog public class EyeProt ...

  2. Android护眼模式功能小记

    最近自己在做一个小说阅读器,看到某阅有护眼模式功能,别人都有,我怎么能没有? 现在这功能已经不稀奇了,很多手机都带有这个功能. 实现起来不难,用一个蒙版遮在界面上面就行. 至于蒙版,可以用Window ...

  3. android 护眼模式设置参数,节能护眼看这里!玩转Android手机的显示设置

    原标题:节能护眼看这里!玩转Android手机的显示设置 对智能手机而言,除了性能以外,其屏幕的显示效果和续航时间对体验的影响往往更加直观.在系统设置的"显示"功能列表中,我们就能 ...

  4. Android 小说阅读护眼模式

    Android 小说阅读护眼模式 实现方案:采用全局dialog 覆盖APP  悬浮在 其他APP之上,给dialog设置护眼色值 自定义护眼模式dialog public class EyeProt ...

  5. android护眼程序原理,Android 护眼模式的实现

    思路:获取content根布局,在上面添加一层浮层,默认透明,开启护眼模式设置护眼色值. 实现:在BaseActivity的onCreate方法中,添加浮层,所有的Activity继承BaseActi ...

  6. android反射调用护眼模式

    android 11反射调用护眼模式/夜间模式 Android 10 推出了 COLOR_DISPLAY_SERVICE 系统服务,具备系统 API 接口,使系统."设置"和系统界 ...

  7. Android 实现护眼模式

    一.背景 在阅读软件或者儿童软件都需要护眼模式来降低蓝光的辐射. 二.实现方案 首先在每个activity创建的时候在最上层添加一层view,去掉点击事件. 用sp或者mmkv来存储当前是否打开护眼模 ...

  8. Flutter实现Android护眼模式

    有一个奇葩的需求,甲方需要实现Android端护眼需求.查找了一番,发现护眼模式是某些厂商的,某些机型有提供.而且没有对外提供Api调用.于是思索一番,决定自己通过插件方式,使用原生方法实现. 先上效 ...

  9. Android 10.0 开启和关闭护眼模式

    1.概述 在10.0系统的产品定制化中,由于一些定制化开发设备中,需要护眼模式,而护眼模式功能开启和关闭 也需要提供接口供app调用,这就需要在系统api中自定义的服务中,提供开启关闭护眼模式的接口, ...

  10. Android护眼模式、屏幕亮度调节功能开发【基于Android8.0】

    Android护眼模式.屏幕亮度调节功能开发[基于Android8.0] [引言]网上关于写护眼模式,屏幕亮度调节的android的方法很少,找到的都不能很好的适配Android8.0的版本.于是自己 ...

最新文章

  1. $(document).ready()和window.onload的区别
  2. HDLBits 系列(31)Serial Receiver and Datapath
  3. linux:ls -l详解
  4. ssl1236-逃亡准备【dp之多重背包】
  5. c4droid语言字体颜色,关于printf如何输出颜色
  6. 查看自己设置的jvm参数
  7. Vue + webpack 项目配置化、接口请求统一管理
  8. 数据表的创建(一对多,多对多)
  9. 再谈typedef(重点为函数指针)
  10. 计算机没考好的检讨书300百以上,考试没考好的万能检讨书300字(精选5篇)
  11. centos7轻松搭建文件服务器
  12. 思科交换机配置dhcp
  13. 前端电子时钟字体引入
  14. 步进电机弯道加速度、起跳速度、单轴加速度设置方法
  15. Typora完整教程
  16. 完美世界前三季营收57亿同比降15% 净利14.4亿同比增80%
  17. 长安清酒·花酿清酒一瓣心醉的甜香
  18. iOS 指南针的制作 附带源码
  19. 当提示“当前帐户被锁定,可能无法登录”时,如何解锁帐户?
  20. 获取html下拉菜单selected,原生js获取select下拉框的selected的option项

热门文章

  1. 2020-11-30 DOA估计/方向谱分析 中文书单
  2. 服务器sel信息是什么意思,英特尔?服务器主板 — 如何解压和读取的服务器事件日志(SEL)...
  3. vite 本地运行首次进入页面加载慢问题
  4. DoubleClick公司推出移动广告平台
  5. Mac终端ssh连接Linux服务器
  6. 如何进行邮件营销,邮件营销群发是否有效?
  7. Flash XSS 漏洞实例
  8. 2.安装Clouda框架
  9. flashfxp用什么协议连接服务器,flashfxp怎么连接,flashfxp怎么连接,具体的连接方法...
  10. 日常使用计算机如何进行病毒防范,电脑日常生活中怎么防范电脑病毒