由于前期设计没有考虑到这一方面,在实现护眼模式的时候会有比较大的麻烦,所以选择了一个折中的方式,使用一个类似新浪微博的实现方式,增加一个蒙版,代码实现

 /*** 开启护眼模式*/public void openEye() {if (eyeView == null) {WindowManager.LayoutParams nightViewParam = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_APPLICATION,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN| WindowManager.LayoutParams.FLAG_FULLSCREEN| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSPARENT);nightViewParam.width = ViewGroup.LayoutParams.MATCH_PARENT;nightViewParam.height = getScreenHeight();nightViewParam.gravity = Gravity.TOP | Gravity.LEFT;nightViewParam.y = 0;nightViewParam.x = 0;eyeView = new View(this);eyeView.setBackgroundColor(0x99000000);getWindowManager().addView(eyeView, nightViewParam);}}/*** 关闭护眼模式*/public void closeEye() {if (eyeView != null) {eyeView.setBackgroundColor(Color.TRANSPARENT);getWindowManager().removeView(eyeView);eyeView = null;}}

网上有许多类似的方式,但是很多都无法遮住状态栏,这个可以实现遮挡状态栏的需求,但是也有一些问题,无法遮挡dialog,和遮挡键盘的时候有一下闪烁

这里面主要的涉及到的知识点就是参数设置,往上找了一下相关,可以参考
 public int flags   行为选项/旗标,默认为 none .
 下面定义了 flags 的取值:
  public static final int FLAG_DIM_BEHIND       = 0x00000002;                窗口之后的内容变暗。

public static final int FLAG_BLUR_BEHIND       = 0x00000004;             窗口之后的内容变模糊。

public static final int FLAG_NOT_FOCUSABLE     = 0x00000008          不许获得焦点。不能获得按键输入焦点,所以不能向它发送按键或按钮事件。那些时间将发送给它后面的可以获得焦点的窗口。此选项还会设置FLAG_NOT_TOUCH_MODAL选项。设置此选项,意味着窗口不能与软输入法进行交互,所以它的Z序独立于任何活动的输入(换句话说,它可以全屏显示,如果需要的话,可覆盖输入法窗口)。要修改这一行为,可参考FLAG_ALT_FOCUSALBE_IM选项。不接受触摸屏事件。

public static final int FLAG_NOT_TOUCHABLE     = 0x00000010        当窗口可以获得焦点(没有设置 FLAG_NOT_FOCUSALBE 选项)时,仍然将窗口范围之外的点设备事件(鼠标、触摸屏)发送给后面的窗口处理。否则它将独占所有的点设备事件,而不管它们是不是发生在窗口范围内。

public static final int FLAG_NOT_TOUCH_MODAL   = 0x00000020;        如果设置了这个标志,当设备休眠时,点击触摸屏,设备将收到这个第一触摸事件。

public static final int FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040;   通常第一触摸事件被系统所消耗,用户不会看到他们点击屏幕有什么反应。
     
      public static final int FLAG_KEEP_SCREEN_ON    = 0x00000080; 当此窗口为用户可见时,保持设备常开,并保持亮度不变。
      
      public static final int FLAG_LAYOUT_IN_SCREEN   =0x00000100;//窗口占满整个屏幕,忽略周围的装饰边框(例如状态栏)。此窗口需考虑到装饰边框的内容。
      
      public static final int FLAG_LAYOUT_NO_LIMITS   =0x00000200;//允许窗口扩展到屏幕之外。
      
      public static final int FLAG_FULLSCREEN     = 0x00000400;//窗口显示时,隐藏所有的屏幕装饰(例如状态条)。使窗口占用整个显示区域。
  
      public static final int FLAG_FORCE_NOT_FULLSCREEN   =0x00000800;//    此选项将覆盖FLAG_FULLSCREEN选项,并强制屏幕装饰(如状态条)弹出。
 
      public static final int FLAG_DITHER           = 0x00001000;//     抖动。指 对半透明的显示方法。又称“点透”。图形处理较差的设备往往用“点透”替代Alpha混合。
 
      public static final int FLAG_SECURE           = 0x00002000;//     不允许屏幕截图。
  
      public static final int FLAG_SCALED           = 0x00004000;//    一种特殊模式,布局参数用于指示显示比例。
   
      public static final int FLAG_IGNORE_CHEEK_PRESSES   = 0x00008000;//   当屏幕有可能贴着脸时,这一选项可防止面颊对屏幕造成误操作。
   
      public static final int FLAG_LAYOUT_INSET_DECOR = 0x00010000;//   当请求布局时,你的窗口可能出现在状态栏的上面或下面,从而造成遮挡。当设置这一选项后,窗口管理器将确保窗口内容不会被装饰条(状态栏)盖住。

public static final int FLAG_ALT_FOCUSABLE_IM = 0x00020000;      反转FLAG_NOT_FOCUSABLE选项。
      如果同时设置了FLAG_NOT_FOCUSABLE选项和本选项,窗口将能够与输入法交互,允许输入法窗口覆盖;
      如果FLAG_NOT_FOCUSABLE没有设置而设置了本选项,窗口不能与输入法交互,可以覆盖输入法窗口。
    
      public static final int FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000;  如果你设置了FLAG_NOT_TOUCH_MODAL,那么当触屏事件发生在窗口之外事,可以通过设置此标志接收到一个MotionEvent.ACTION_OUTSIDE事件。注意,你不会收到完整的down/move/up事件,只有第一次down事件时可以收到ACTION_OUTSIDE。
  
      public static final int FLAG_SHOW_WHEN_LOCKED = 0x00080000;    当屏幕锁定时,窗口可以被看到。这使得应用程序窗口优先于锁屏界面。可配合FLAG_KEEP_SCREEN_ON选项点亮屏幕并直接显示在锁屏界面之前。可使用FLAG_DISMISS_KEYGUARD选项直接解除非加锁的锁屏状态。此选项只用于最顶层的全屏幕窗口。
      
      public static final int FLAG_SHOW_WALLPAPER = 0x00100000;请求系统墙纸显示在你的窗口后面。窗口必须是半透明的。
    
      public static final int FLAG_TURN_SCREEN_ON = 0x00200000;  窗口一旦显示出来,系统将点亮屏幕,正如用户唤醒设备那样。
     
      public static final int FLAG_DISMISS_KEYGUARD = 0x00400000; 解除锁屏。只有锁屏界面不是加密的才能解锁。如果锁屏界面是加密的,那么用户解锁之后才能看到此窗口,除非设置了FLAG_SHOW_WHEN_LOCKED选项。
   
      public static final int FLAG_KEEP_SURFACE_WHILE_ANIMATING =0x10000000;   锁屏界面淡出时,继续运行它的动画。
    
      public static final int FLAG_COMPATIBLE_WINDOW = 0x20000000;  以原始尺寸显示窗口。用于在兼容模式下运行程序。
   
      public static final int FLAG_SYSTEM_ERROR = 0x40000000;   用于系统对话框。设置此选项的窗口将无条件获得焦点。

android 添加蒙版实现护眼模式(夜间模式)相关推荐

  1. QQ浏览器如何开启夜间模式 夜间模式使用技巧分享

    在夜晚长时间且高亮度的使用了QQ浏览器后,眼睛不免会觉得干涩.而开启QQ浏览器中的黑暗模式,则可以在一定程度上缓解这一问题!那么,QQ浏览器要如何开启夜间模式呢?下面小编就来分享一下QQ浏览器夜间模式 ...

  2. div点击穿透,CSS属性pointer-events :none;实现护眼模式, 夜间模式遮罩

    .div-xx{ pointer-events :none;/*取消事件,点击穿透*/ } pointer-events , css属性值 auto--效果和没有定义pointer-events属性相 ...

  3. idea 调节背景护眼_夜间用电脑亮瞎眼睛?这份夜间护眼指南来帮你。

    题图:来自 Unsplash 文/彭宏豪,笔名/安哥拉 不知从什么时候起,「头秃」成了网友和周围人口中的一个高频词汇,似乎很多事情都离不了头秃--学到头秃.工作到头秃.熬夜到头秃等等,就连「突然」也渐 ...

  4. 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式

    基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 目录 基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 演示视频 基本功能: 仿真图 程序 程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 ...

  5. 开启Android Q DarkMode | 开启Android Q深色模式 夜间模式

    1.首先下载Image 注意,这里最好是下载google APIs Intel x86 System Image 2.创建虚拟机,启动模拟器 如果报错HAXM 没有安装的话,请安装一下 注意,这个HA ...

  6. android夜间模式护眼,长时间看开着护眼模式(夜间模式)玩手机,这样对人有影响吗?...

    原标题:长时间看开着"护眼模式(夜间模式)"玩手机,这样对人有影响吗? 现在我们对手机的依赖越来越严重,安全感不再来自身边人,而是形影不离的手机.人们除了每天三分之一的时间花在睡觉 ...

  7. android反射调用护眼模式

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

  8. 苹果手机有护眼模式吗_睡觉前忍不住刷手机?除了夜间模式,这些护眼小技巧赶快收好!...

    ​不做深度指南,只愿浅度指北 最近几天,不知怎地,突然睡不着觉,每天刷手机到深夜,可屏幕太亮了,仿佛照得整个房间都在冒光,就导致了一系列的套娃现象:屏幕亮→睡不着→刷手机→屏幕亮-- 但手机那么好玩, ...

  9. 一种简单的护眼模式实现

    概述: 不少健康管理类的app都有护眼模式的功能,在以往做过的项目中也曾经做过护眼模式功能的开发,当时参考和总结了市面上部分护眼类app的实现,顺便利用自身OS厂商可给与系统权限的优势实现了护眼模式, ...

  10. Android实现夜间模式小结

    随着APP实现的功能越来越丰富, 看小说看视频上网等等, 现在不少人花在手机平板等移动终端上的时间越来越长了. 但手机和平板的屏幕并不像Kindle那类电纸书的水墨屏那么耐看, 由于自发光的屏幕特性, ...

最新文章

  1. python 读法-python 怎么读,python 怎么读
  2. 电视机检测大巴徘徊在英格兰的大街上
  3. sql server 存储过程 拼接SQL 超过8000
  4. HighNewTech之QAB:重新温读张首晟教授2018年8月演讲PPT《量子计算, 人工智能与区块链》
  5. python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
  6. bytes转16进制整数 python_Python 十进制转二进制、八进制、十六进制
  7. NFS网络文件系统服务配置、验证及错误解决
  8. 表格无边框,有内框,在table嵌套时,防止出现重复边线
  9. 可公度线段与欧几里得(Euclid)算法
  10. 高斯-赛得尔迭代式 c++_高斯混合模型(聚类、密度估计)
  11. html不用画布太阳系示意图,html5-canvas-太阳系2
  12. vlookup多条件的使用
  13. 使用 Datagrip 导入 Excel 数据表
  14. 你的用户珍贵么?杀鸡吃肉和养鸡吃蛋的选择……
  15. 迷阵突围 (dijkstra求次短路)邻接表,邻接矩阵
  16. 爱迪尔 门锁接口文档_爱迪尔门锁软件管理系统
  17. OpenLayer学习之加载天地图在线地图
  18. 经典CVE:破壳漏洞
  19. iis6导出Excel报错检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,8000401a错误解决办法
  20. web作业—简历信息管理系统

热门文章

  1. word 此文件来自其它计算机,问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……...
  2. DNS安全漫谈:DNS劫持频发,网络安全去哪儿了?
  3. 袁国宝:罗永浩直播之道
  4. 深度系统linux deepin如何按装,安装深度Deepin 15.11操作系统的方法
  5. IntelliJ IDEA主题背景设置豆沙绿护眼色
  6. 华为WLAN基本概述
  7. 重新实现reuseport逻辑,实现一致性哈希
  8. 探索反汇编-在Linux环境下
  9. 恩尼格玛模拟器_使用ENIGMA模拟器进行数据加密和解密
  10. 中国象棋人工智能实现