android 添加蒙版实现护眼模式(夜间模式)
由于前期设计没有考虑到这一方面,在实现护眼模式的时候会有比较大的麻烦,所以选择了一个折中的方式,使用一个类似新浪微博的实现方式,增加一个蒙版,代码实现
/*** 开启护眼模式*/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 添加蒙版实现护眼模式(夜间模式)相关推荐
- QQ浏览器如何开启夜间模式 夜间模式使用技巧分享
在夜晚长时间且高亮度的使用了QQ浏览器后,眼睛不免会觉得干涩.而开启QQ浏览器中的黑暗模式,则可以在一定程度上缓解这一问题!那么,QQ浏览器要如何开启夜间模式呢?下面小编就来分享一下QQ浏览器夜间模式 ...
- div点击穿透,CSS属性pointer-events :none;实现护眼模式, 夜间模式遮罩
.div-xx{ pointer-events :none;/*取消事件,点击穿透*/ } pointer-events , css属性值 auto--效果和没有定义pointer-events属性相 ...
- idea 调节背景护眼_夜间用电脑亮瞎眼睛?这份夜间护眼指南来帮你。
题图:来自 Unsplash 文/彭宏豪,笔名/安哥拉 不知从什么时候起,「头秃」成了网友和周围人口中的一个高频词汇,似乎很多事情都离不了头秃--学到头秃.工作到头秃.熬夜到头秃等等,就连「突然」也渐 ...
- 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式
基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 目录 基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 演示视频 基本功能: 仿真图 程序 程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 ...
- 开启Android Q DarkMode | 开启Android Q深色模式 夜间模式
1.首先下载Image 注意,这里最好是下载google APIs Intel x86 System Image 2.创建虚拟机,启动模拟器 如果报错HAXM 没有安装的话,请安装一下 注意,这个HA ...
- android夜间模式护眼,长时间看开着护眼模式(夜间模式)玩手机,这样对人有影响吗?...
原标题:长时间看开着"护眼模式(夜间模式)"玩手机,这样对人有影响吗? 现在我们对手机的依赖越来越严重,安全感不再来自身边人,而是形影不离的手机.人们除了每天三分之一的时间花在睡觉 ...
- android反射调用护眼模式
android 11反射调用护眼模式/夜间模式 Android 10 推出了 COLOR_DISPLAY_SERVICE 系统服务,具备系统 API 接口,使系统."设置"和系统界 ...
- 苹果手机有护眼模式吗_睡觉前忍不住刷手机?除了夜间模式,这些护眼小技巧赶快收好!...
不做深度指南,只愿浅度指北 最近几天,不知怎地,突然睡不着觉,每天刷手机到深夜,可屏幕太亮了,仿佛照得整个房间都在冒光,就导致了一系列的套娃现象:屏幕亮→睡不着→刷手机→屏幕亮-- 但手机那么好玩, ...
- 一种简单的护眼模式实现
概述: 不少健康管理类的app都有护眼模式的功能,在以往做过的项目中也曾经做过护眼模式功能的开发,当时参考和总结了市面上部分护眼类app的实现,顺便利用自身OS厂商可给与系统权限的优势实现了护眼模式, ...
- Android实现夜间模式小结
随着APP实现的功能越来越丰富, 看小说看视频上网等等, 现在不少人花在手机平板等移动终端上的时间越来越长了. 但手机和平板的屏幕并不像Kindle那类电纸书的水墨屏那么耐看, 由于自发光的屏幕特性, ...
最新文章
- python 读法-python 怎么读,python 怎么读
- 电视机检测大巴徘徊在英格兰的大街上
- sql server 存储过程 拼接SQL 超过8000
- HighNewTech之QAB:重新温读张首晟教授2018年8月演讲PPT《量子计算, 人工智能与区块链》
- python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
- bytes转16进制整数 python_Python 十进制转二进制、八进制、十六进制
- NFS网络文件系统服务配置、验证及错误解决
- 表格无边框,有内框,在table嵌套时,防止出现重复边线
- 可公度线段与欧几里得(Euclid)算法
- 高斯-赛得尔迭代式 c++_高斯混合模型(聚类、密度估计)
- html不用画布太阳系示意图,html5-canvas-太阳系2
- vlookup多条件的使用
- 使用 Datagrip 导入 Excel 数据表
- 你的用户珍贵么?杀鸡吃肉和养鸡吃蛋的选择……
- 迷阵突围 (dijkstra求次短路)邻接表,邻接矩阵
- 爱迪尔 门锁接口文档_爱迪尔门锁软件管理系统
- OpenLayer学习之加载天地图在线地图
- 经典CVE:破壳漏洞
- iis6导出Excel报错检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,8000401a错误解决办法
- web作业—简历信息管理系统
热门文章
- word 此文件来自其它计算机,问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……...
- DNS安全漫谈:DNS劫持频发,网络安全去哪儿了?
- 袁国宝:罗永浩直播之道
- 深度系统linux deepin如何按装,安装深度Deepin 15.11操作系统的方法
- IntelliJ IDEA主题背景设置豆沙绿护眼色
- 华为WLAN基本概述
- 重新实现reuseport逻辑,实现一致性哈希
- 探索反汇编-在Linux环境下
- 恩尼格玛模拟器_使用ENIGMA模拟器进行数据加密和解密
- 中国象棋人工智能实现