Android 实现护眼模式

一、背景

在阅读软件或者儿童软件都需要护眼模式来降低蓝光的辐射。

二、实现方案
  1. 首先在每个activity创建的时候在最上层添加一层view,去掉点击事件。
  2. 用sp或者mmkv来存储当前是否打开护眼模式。
  3. 在每次activity onresume的时候去check护眼模式的状态,护眼模式处于打开状态把view的背景设置成护眼的颜色。
三、代码实现

1、首先注册一个activity生命周期监听器,然后在onCreate的时候添加护眼view蒙层,在onResume的时候去check护眼模式的状态。

/**
  * activity 生命周期监听器
  */
 private var mActivityLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks {
     override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
     }

     override fun onActivityStarted(activity: Activity) {
     }

     override fun onActivityResumed(activity: Activity) {
         if (isEyeComfortEnabled()) {
             ViewUtils.openEyeComfort(activity, R.id.eye_comfort_view_id)
         } else {
             ViewUtils.closeEyeComfort(activity, R.id.eye_comfort_view_id)
         }
     }

     override fun onActivityPaused(activity: Activity) {
     }

     override fun onActivityStopped(activity: Activity) {
     }

     override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
     }

     override fun onActivityDestroyed(activity: Activity) {
     }

     override fun onActivityPostCreated(activity: Activity, savedInstanceState: Bundle?) {
         //在每个activity创建的时候加护眼蒙层
         ViewUtils.addEyeComfortView(activity, R.id.eye_comfort_view_id)
         if (isEyeComfortEnabled()) {
             ViewUtils.openEyeComfort(activity, R.id.eye_comfort_view_id)
         } else {
             ViewUtils.closeEyeComfort(activity, R.id.eye_comfort_view_id)
         }
     }

 }
 mApplication.registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks)

2、添加蒙层,打开护眼模式,关闭护眼模式代码如下:

/**
 * 添加护眼蒙层
 *
 * @param activity activity界面
 */
 public static void addEyeComfortView(Activity activity, int id) {
     ViewGroup content = activity.findViewById(android.R.id.content);
     //创建盟层view用来做护眼模式
     View eyeComfortView = new FrameLayout(activity);
     eyeComfortView.setId(id);
     eyeComfortView.setBackgroundColor(Color.TRANSPARENT);
     WindowManager.LayoutParams params = new WindowManager.LayoutParams();
     //设置view为不可定焦,不可触
     params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
             | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
             | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
     //设置充满全屏幕
     params.width = WindowManager.LayoutParams.MATCH_PARENT;
     params.height = WindowManager.LayoutParams.MATCH_PARENT;
     content.addView(eyeComfortView, params);
 }

 /**
  * 打开护眼模式
  *
  * @param activity activity界面
  * @param id       view id
  */
 public static void openEyeComfort(Activity activity, int id) {
     View eyeComfortView = activity.findViewById(id);
     eyeComfortView.setBackgroundColor(IHColorUtils.INSTANCE.getEyeComfortColor(50));
 }

 /**
  * 关闭护眼模式
  *
  * @param activity activity界面
  * @param id       view id
  */
 public static void closeEyeComfort(Activity activity, int id) {
     View eyeComfortView = activity.findViewById(id);
     eyeComfortView.setBackgroundColor(Color.TRANSPARENT);
 }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值