WindowManager.LayoutParams的各种flag含义


FLAG_ALLOW_LOCK_WHILE_SCREEN_ON

只要这个window对用户是可见的,则允许在屏幕开启的时候锁定屏幕这个flag可以单独的使用,也可以配合FLAG_KEEP_SCREEN_ON和(或者) FLAG_SHOW_WHEN_LOCKED使用

FLAG_DIM_BEHIND

所有在这个window之后的会变暗,使用dimAmount属性来控制变暗的程度(1.0不透明,0.0完全透明)

FLAG_NOT_FOCUSABLE

设置之后window永远不会获取焦点,所以用户不能给此window发送点击事件焦点会传递给在其下面的可获取焦点的window这个flag同时会启用 FLAG_NOT_TOUCH_MODAL flag , 不管你有没有手动设置设置这个flag同时表明了这个window不会和软键盘交互,(这句话的翻译我不知道对不对)所以window会独立于激活的软键盘之上(这句话的意思就是window会在Z轴上置于输入法之上,所以window可以全屏使用来覆盖住输入法,你可以使用FLAG_ALT_FOCUSABLE_IM 来修改这个行为)

FLAG_NOT_TOUCHABLE

这个window永远无法获取点击事件

FLAG_NOT_TOUCH_MODAL

即使这个window是可获取焦点的,也允许window之外点击事件传递给其他在其之后的indow

如果不设置这个值,则window消费掉所有点击事件,不管这些点击事件是不是在window的范围之内。//如果要做悬浮框,我想这个flag肯定得设置,但api>=23就别想了。这个flag简而言之就是说,当前window区域以外的点击事件传递给下层window,当前window区域以内的点击事件自己处理

FLAG_TOUCHABLE_WHEN_WAKING

当设置了这个值,则device休眠的时候,当触摸屏被点击,window会收到首次点击事件,通常当用户看不见东西时,首次点击事件会被系统消费

FLAG_KEEP_SCREEN_ON

当这个window对用户是可见状态,则保持设备屏幕不关闭且不变暗

FLAG_LAYOUT_IN_SCREEN

将window放置在整个屏幕之内,无视其他的装饰(比如状态栏)window要在考虑到屏幕的其他装饰来定位其中的内容这个flag通常使用Window类的setFlags(int, int)方法来设置

FLAG_LAYOUT_NO_LIMITS

允许window扩展值屏幕之外

FLAG_FULLSCREEN

当这个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.

FLAG_FORCE_NOT_FULLSCREEN

覆盖FLAG_FULLSCREEN效果,并强制显示屏幕上的一些装饰(如状态栏)

FLAG_SECURE

把这个window中的内容看作需要保护的内容,防止被截屏,或防止内容显示在一些不安全的屏幕上

FLAG_IGNORE_CHEEK_PRESSES

这个flag一般用于,当用户把脸贴在屏幕上,它会过滤不需要的点击事件,当检测到一个事件流,这个程序会直接接收到一个CANCEL事件.这样程序可以正确的处理这种情况,直到手指离开屏幕

FLAG_LAYOUT_INSET_DECOR

这个flag只能配合 FLAG_LAYOUT_IN_SCREEN 一起使用.当在屏幕中请求layout时,window可能在一些装饰物(如状态栏)之上或者之后当使用这个flag时,window manager会报告插入window的矩形大小,来确保你的内容不会被装饰物(如状态栏)掩盖.这个flag一般用Window类的 setFlags(int, int)方法来设置

FLAG_ALT_FOCUSABLE_IM

转变 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交互,可以放置在输入法上面

FLAG_WATCH_OUTSIDE_TOUCH

如果你已经设置了FLAG_NOT_TOUCH_MODAL,那么你可以设置FLAG_WATCH_OUTSIDE_TOUCH这个flag,这样一个点击事件如果发生在你的window之外的范围,你就会接收到一个特殊的MotionEvent,MotionEvent.ACTION_OUTSIDE注意,你只会接收到点击事件的第一下,而之后的DOWN/MOVE/UP等手势全都不会接收到

FLAG_SHOW_WHEN_LOCKED

一个特殊的flag,使得window可以在锁屏状态下显示,这个flag会使得window比keyguard或其他锁屏界面具有更高的层级可以配合FLAG_KEEP_SCREEN_ON使用,点亮屏幕,在显示keyguard window之前显示你的window.可以配合FLAG_DISMISS_KEYGUARD使用来自动解锁没密码的keyguards这个flag只能应用在最顶层的全屏window上,用人话说就是可以让window显示在锁屏界面上

FLAG_TURN_SCREEN_ON

当window被添加或者显示,系统会点亮屏幕,就好像用户唤醒屏幕一样

FLAG_DISMISS_KEYGUARD

当使用的是无密码的锁屏界面,显示此window会使锁屏界面被自动解锁,其他废话就不翻译了

FLAG_SPLIT_TOUCH

当window设置这个flag,window会接收来自window边界之外发送给其他window的点击事件,支持多点触控.当这个flag没有设置的时候,第一下点击则决定了哪个window会接收整个点击事件,直到手指拿开.当设置了这个flag,这每一个点击事件(不一定是第一个)都决定了那个window来接收剩下的点击事件,直到手指拿开.点击事件会被分开传递给多个window.貌似是关于多点触控的

FLAG_HARDWARE_ACCELERATED

表示这个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就自动设置上了

FLAG_LOCAL_FOCUS_MODE

设置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)

FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

这个flag表示window负责绘制状态栏的北京当设置了这个flag,系统状态栏会变透明,同时这个相应的区域会被填满 getStatusBarColor() and getNavigationBarColor()的颜色

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354