本文实际上就是翻译了官方文档的flag部分,以便使用的时候对照。

flags变量设置的值的各种意义//---------------1-----------------------------------
FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
//Constant Value: 1 (0x00000001)
只要这个window对用户是可见的,则允许在屏幕开启的时候锁定屏幕
这个flag可以单独的使用,也可以配合FLAG_KEEP_SCREEN_ON和(或者) FLAG_SHOW_WHEN_LOCKED使用
//----------------------------------------------------//---------------2-----------------------------------
FLAG_DIM_BEHIND
//Constant Value: 2 (0x00000002)
所有在这个window之后的会变暗,
使用dimAmount属性来控制变暗的程度(1.0不透明,0.0完全透明)
//----------------------------------------------------//---------------3-----------------------------------
FLAG_NOT_FOCUSABLE
//Constant Value: 8 (0x00000008)
设置之后window永远不会获取焦点,所以用户不能给此window发送点击事件
焦点会传递给在其下面的可获取焦点的window
这个flag同时会启用 FLAG_NOT_TOUCH_MODAL flag , 不管你有没有手动设置
设置这个flag同时表明了这个window不会和软键盘交互,
(这句话的翻译我不知道对不对)所以window会独立于激活的软键盘之上(这句话的意思就是window会在Z轴上置于输入法之上,所以window可以全屏使用来覆盖住输入法,你可以使用 FLAG_ALT_FOCUSABLE_IM 来修改这个行为)
//----------------------------------------------------//---------------4-----------------------------------
FLAG_NOT_TOUCHABLE
//Constant Value: 16 (0x00000010)
这个window永远无法获取点击事件
//----------------------------------------------------//---------------5-----------------------------------
FLAG_NOT_TOUCH_MODAL
Constant Value: 32 (0x00000020)
即使这个window是可获取焦点的,
也允许window之外点击事件传递给其他在其之后的window
如果不设置这个值,则window消费掉所有点击事件,不管这些点击事件是不是在window的范围之内
//如果要做悬浮框,我想这个flag肯定得设置,但api>=23就别想了这个flag简而言之就是说,当前window区域以外的点击事件传递给下层window,当前window区域以内的点击事件自己处理//----------------------------------------------------//---------------6-----------------------------------
FLAG_TOUCHABLE_WHEN_WAKING
//Constant Value: 64 (0x00000040)
//This constant was deprecated in API level 20.等于说没什么吊用了
//This flag has no effect.
当设置了这个值,则device休眠的时候,当触摸屏被点击,window会收到首次点击事件,通常当用户看不见东西时,首次点击事件会被系统消费
//----------------------------------------------------//---------------7-----------------------------------
FLAG_KEEP_SCREEN_ON
//Constant Value: 128 (0x00000080)
当这个window对用户是可见状态,则保持设备屏幕不关闭且不变暗
//----------------------------------------------------//---------------8-----------------------------------
FLAG_LAYOUT_IN_SCREEN
//Constant Value: 256 (0x00000100)
将window放置在整个屏幕之内,无视其他的装饰(比如状态栏)
window要在考虑到屏幕的其他装饰来定位其中的内容
这个flag通常使用Window类的setFlags(int, int)方法来设置
//----------------------------------------------------//---------------9-----------------------------------
FLAG_LAYOUT_NO_LIMITS
//Constant Value: 512 (0x00000200)
允许window扩展值屏幕之外
//----------------------------------------------------//---------------10-----------------------------------
FLAG_FULLSCREEN
//Constant Value: 1024 (0x00000400)
当这个window显示的时候,隐藏所有的装饰物(比如状态栏)
这个flag允许window使用整个屏幕区域
当设置这个flag的window处于顶层的时候,状态栏会被隐藏
全屏的时候会忽略 softInputMode 变量设置的SOFT_INPUT_ADJUST_RESIZE 效果,屏幕会不保持全屏且不会resize
这个flag可以在主题属性(theme)中来控制
通过 windowFullscreen 属性来控制
在一些常用的全屏主题中这个属性已经被设置好了
常用全屏主题:   Theme_NoTitleBar_Fullscreen,Theme_Black_NoTitleBar_Fullscreen,Theme_Light_NoTitleBar_Fullscreen,Theme_Holo_NoActionBar_Fullscreen,Theme_Holo_Light_NoActionBar_Fullscreen,Theme_DeviceDefault_NoActionBar_Fullscreen,Theme_DeviceDefault_Light_NoActionBar_Fullscreen.
//----------------------------------------------------//---------------11-----------------------------------
FLAG_FORCE_NOT_FULLSCREEN
//Constant Value: 2048 (0x00000800)
覆盖FLAG_FULLSCREEN效果,并强制显示屏幕上的一些装饰(如状态栏)
//----------------------------------------------------//---------------12-----------------------------------
FLAG_SECURE
//Constant Value: 8192 (0x00002000)
把这个window中的内容看作需要保护的内容,
防止被截屏,或防止内容显示在一些不安全的屏幕上
see https://developer.android.google.cn/reference/android/view/Display.html#FLAG_SECURE for more details about secure surfaces and secure displays
//----------------------------------------------------//---------------13-----------------------------------
FLAG_SCALED
Constant Value: 16384 (0x00004000)
抱歉没看懂,你们还是看原文把
//Window flag: a special mode where the layout parameters are used to perform scaling of the surface when it is composited to the screen.
//----------------------------------------------------//---------------14-----------------------------------
FLAG_IGNORE_CHEEK_PRESSES
//Constant Value: 32768 (0x00008000)
这个flag一般用于,当用户把脸贴在屏幕上,它会过滤不需要的点击事件
当检测到一个事件流,这个程序会直接接收到一个CANCEL事件.
这样程序可以正确的处理这种情况,
直到手指离开屏幕
//----------------------------------------------------//---------------15-----------------------------------
FLAG_LAYOUT_INSET_DECOR
//Constant Value: 65536 (0x00010000)
这个flag只能配合 FLAG_LAYOUT_IN_SCREEN 一起使用.
当在屏幕中请求layout时,window可能在一些装饰物(如状态栏)之上或者之后
当使用这个flag时,window manager会报告插入window的矩形大小,
来确保你的内容不会被装饰物(如状态栏)掩盖.
这个flag一般用Window类的 setFlags(int, int)方法来设置
//----------------------------------------------------//---------------16-----------------------------------
FLAG_ALT_FOCUSABLE_IM
Constant Value: 131072 (0x00020000)
转变  FLAG_NOT_FOCUSABLE 设置的状态,关于这个window是怎么和当前的输入法交互
如果设置了FLAG_NOT_FOCUSABLE且FLAG_ALT_FOCUSABLE_IM也设置了,那么当这个window和input method交互的时候会被放置在input method后面或者旁边.
如果FLAG_NOT_FOCUSABLE没有设置而设置了FLAG_ALT_FOCUSABLE_IM,那么window不需要和input method交互,可以放置在输入法上面
//这个实际上是我强行理解的,翻译得可能不准确,如果要使用的话,还是要自己测试下
//----------------------------------------------------//---------------17-----------------------------------
FLAG_WATCH_OUTSIDE_TOUCH
//Constant Value: 262144 (0x00040000)
如果你已经设置了FLAG_NOT_TOUCH_MODAL,那么你可以设置FLAG_WATCH_OUTSIDE_TOUCH这个flag,
这样一个点击事件如果发生在你的window之外的范围,你就会接收到一个特殊的MotionEvent,MotionEvent.ACTION_OUTSIDE
注意,你只会接收到点击事件的第一下,而之后的DOWN/MOVE/UP等手势全都不会接收到
//----------------------------------------------------//---------------18-----------------------------------
FLAG_SHOW_WHEN_LOCKED
//Constant Value: 524288 (0x00080000)
一个特殊的flag,使得window可以在锁屏状态下显示
这个flag会使得window比keyguard或其他锁屏界面具有更高的层级
可以配合FLAG_KEEP_SCREEN_ON使用,点亮屏幕,在显示keyguard window之前显示你的window.
可以配合FLAG_DISMISS_KEYGUARD使用来自动解锁没密码的keyguards
这个flag只能应用在最顶层的全屏window上用人话说就是可以让window显示在锁屏界面上
//----------------------------------------------------//---------------19-----------------------------------
FLAG_SHOW_WALLPAPER     //实测没吊用,也有可能我理解得不对
//Constant Value: 1048576 (0x00100000)
请求系统将壁纸显示在window后面,这个window表面需要是透明的才能显示出墙纸.
这个flag只能保证如果你的window有透明的区域,墙纸会显示在那
这个flag也可以在theme中使用 windowShowWallpaper 这个属性来设置.
有些主题已经设置好:     Theme_Wallpaper,Theme_Wallpaper_NoTitleBar,Theme_Wallpaper_NoTitleBar_Fullscreen,Theme_Holo_Wallpaper, Theme_Holo_Wallpaper_NoTitleBar,Theme_DeviceDefault_Wallpaper,Theme_DeviceDefault_Wallpaper_NoTitleBar.
//----------------------------------------------------//---------------20-----------------------------------
FLAG_TURN_SCREEN_ON
//Constant Value: 2097152 (0x00200000)
当window被添加或者显示,系统会点亮屏幕,就好像用户唤醒屏幕一样
//----------------------------------------------------//---------------21-----------------------------------
FLAG_DISMISS_KEYGUARD
//Constant Value: 4194304 (0x00400000)
当使用的是无密码的锁屏界面,显示此window会使锁屏界面被自动解锁,其他废话就不翻译了
//----------------------------------------------------//---------------22-----------------------------------
FLAG_SPLIT_TOUCH
//Constant Value: 8388608 (0x00800000)
当window设置这个flag,window会接收来自window边界之外发送给其他window的点击事件,支持多点触控.
当这个flag没有设置的时候,第一下点击则决定了哪个window会接收整个点击事件,直到手指拿开.
当设置了这个flag,这每一个点击事件(不一定是第一个)都决定了那个window来接收剩下的点击事件,直到手指拿开.点击事件会被分开传递给多个window.
貌似是关于多点触控的,我TM自己也没看明白
原文:Window flag: when set the window will accept for touch events outside of its bounds to be sent to other windows that also support split touch. When this flag is not set, the first pointer that goes down determines the window to which all subsequent touches go until all pointers go up. When this flag is set, each pointer (not necessarily the first) that goes down determines the window to which all subsequent touches of that pointer will go until that pointer goes up thereby enabling touches with multiple pointers to be split across multiple windows.
//----------------------------------------------------//---------------23-----------------------------------
FLAG_HARDWARE_ACCELERATED
//Constant Value: 16777216 (0x01000000)
表示这个window是否启动硬件加速,请求硬件加速但不能保证硬件加速生效
如果仅是用来启动硬件加速,可以在代码中控制,使用下面的代码给指定window启动硬件加速:
Window w = activity.getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
有一件很重要的事需要记住,这个flag需要在Activity和dialog添加view之前来配置当你在manifest中设置了硬件加速后,这个flag不能用来取消硬件加速当在Activity标签或者application标签中设置了 hardwareAccelerated = true属性这个flag就自动设置上了
//----------------------------------------------------//---------------24-----------------------------------
FLAG_LOCAL_FOCUS_MODE
//Constant Value: 268435456 (0x10000000)
设置flag启用local focus模式(我也不知道local focus mode是什么),在这种模式下window可以不依赖windowmanager独立的控制焦点,使用window的 setLocalFocus(boolean, boolean) 方法即可
通常在这种模式下,window不会通过windowmanager获取到touch/key event,
但是会通过local injection(我不知道这是什么)得到event,by using injectInputEvent(InputEvent) 方法(貌似是手动的强行向一个window插入一个input event)
//----------------------------------------------------//---------------25-----------------------------------
FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
//Constant Value: -2147483648 (0x80000000)
这个flag表示window负责绘制状态栏的北京
当设置了这个flag,系统状态栏会变透明,同时这个相应的区域会被填满 getStatusBarColor() and getNavigationBarColor()的颜色,
//----------------------------------------------------

WindowManager.LayoutParams各种flag含义相关推荐

  1. Window Flag 含义

    简介 WindowManager.LayoutParams 是用于向WindowManager 描述Window窗口的相关展示策略,它继承自于 ViewGroup.LayoutParams,在我们日常 ...

  2. Android WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法

    1.理清概念 我们使用过Dialog和PopupWindow,还有Toast,它们都显示在Activity之上.那么我们首先需要理解的是android中是如何去绘制这些UI的呢?这里我只讲我所理解的, ...

  3. WindowManager LayoutParams 上

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文参照 ...

  4. Android窗口机制(五)最终章:WindowManager.LayoutParams和Token以及其他窗口Dialog,Toast

    转自:https://www.jianshu.com/p/bac61386d9bf 前面几篇文章基本介绍完Activity上的窗口机制,但是我们常见的窗口就还有Dialog,Toast这些,本篇文章就 ...

  5. WindowManager.LayoutParams详解总结和对应实例

    总结的比较好,并加上对应实例配合参考理解 public static class WindowManager.LayoutParams extends ViewGroup.LayoutParams i ...

  6. Android之WindowManager.LayoutParams介绍

    image.png .. LayoutParams WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.LayoutPara ...

  7. WindowManager.LayoutParams类22

    引用:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=84893 WindowManager.LayoutParams 是 Win ...

  8. WindowManager.LayoutParams类

    WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.LayoutParams .    它的内容十分丰富.其实WindowM ...

  9. Android 系统(48)---WindowManager.LayoutParams 详解

    WindowManager.LayoutParams 详解 WindowManager.LayoutParams 是 WindowManager 接口的嵌套类:继承于 ViewGroup.Layout ...

最新文章

  1. 将深度学习技术应用于基于情境感知的情绪识别
  2. 网站流量突然下降从三方面进行判断病因
  3. [Selenium]Eclipse hangs at 57% in debug mode with TestNG tests
  4. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)
  5. java安全编码指南之:异常处理
  6. 达摩院 2020 预测:工业互联网超融合来袭!
  7. 推荐几个自己经常去的一些博客和网站
  8. Android项目实战欢迎界面
  9. 建筑电气工程设计常用图形和文字符号_建筑水电图纸看不懂?10年老师傅教你看图技巧,分分钟安排...
  10. 深入比特币原理(三)——交易的输入(input)与输出(output)
  11. java 图像 截取正方形_响应但是作为img元素的正方形的图像
  12. 【Elasticsearch】明明存在,怎么搜索不出来呢?
  13. win8系统intellij输入中文问题
  14. 温度循环试验标准gjb150-温度循环试验检测机构报告
  15. 傲梅分区助手 linux,傲梅分区助手专业版
  16. WindowsServer2008网卡驱动问题
  17. linux服务器设置定时任务,Linux服务器定时任务
  18. 隐藏受保护的系统文件的注册表键值
  19. 干货 | 使用云监控实现触发一个url调用
  20. 去ioe,什么是去IOE呢

热门文章

  1. 反向工程_反向工程:宾利精心复刻了1929 Blower车型
  2. 简述用决策表设计测试用例的步骤_决策表快速入门
  3. jsr223 java_JSR223 Java使用脚本引擎动态修改业务逻辑
  4. 带有en的单词有哪些_en为前缀的单词
  5. 第2章 S交换机管理平面安全
  6. linux修改文件所属用户和组
  7. SQL Server 2008 R2 安全性专题(一):安全原则
  8. 分支1-CentOS6.5下 正/反向域名解析之yum安装/编译安装 的教程
  9. 关于Android模拟器访问本地地址(转)
  10. struts2.2.3需包含的jar包