欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Android >内容正文

Android

Android如何实现全局的护眼模式

发布时间:2023/12/18 Android 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Android如何实现全局的护眼模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转载请标明出处: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如何实现全局的护眼模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。