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

更新时间:2023-06-10 03:18:29 阅读: 评论:0

WindowManager.LayoutParams详解总结和对应实例
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的范围之内
ap是什么//如果要做悬浮框,我想这个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会收到⾸次点击事件,通常当⽤户看不见东西时,⾸次点击事件会被系统消费//----------------------------------------------------
FLAG_KEEP_SCREEN_ON
//Constant Value: 128 (0x00000080)
当这个window对⽤户是可见状态,则保持设备屏幕不关闭且不变暗
//----------------------------------------------------
//---------------8-----------------------------------
FLAG_LAYOUT_IN_SCREEN
//Constant Value: 256 (0x00000100)
将window放置在整个屏幕之内,⽆视其他的装饰(⽐如状态栏)
window要在考虑到屏幕的其他装饰来定位其中的内容
这个flag通常使⽤Window类的tFlags(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.
bec中级听力
//----------------------------------------------------so翻译
//---------------11-----------------------------------
FLAG_FORCE_NOT_FULLSCREEN
//Constant Value: 2048 (0x00000800)
覆盖FLAG_FULLSCREEN效果,并强制显⽰屏幕上的⼀些装饰(如状态栏)
//----------------------------------------------------
//---------------13-----------------------------------
FLAG_SCALED
Constant Value: 16384 (0x00004000)
抱歉没看懂,你们还是看原⽂把
/
/Window flag: a special mode where the layout parameters are ud to perform scaling of the surface when it is composited to the screen.
//----------------------------------------------------
FLAG_IGNORE_CHEEK_PRESSES
//Constant Value: 32768 (0x00008000)
这个flag⼀般⽤于,当⽤户把脸贴在屏幕上,它会过滤不需要的点击事件
当检测到⼀个事件流,这个程序会直接接收到⼀个CANCEL事件.
这样程序可以正确的处理这种情况,
直到⼿指离开屏幕
//----------------------------------------------------
//---------------15-----------------------------------
bamboo是什么意思
FLAG_LAYOUT_INSET_DECOR
//Constant Value: 65536 (0x00010000)
这个flag只能配合 FLAG_LAYOUT_IN_SCREEN ⼀起使⽤.
当在屏幕中请求layout时,window可能在⼀些装饰物(如状态栏)之上或者之后
当使⽤这个flag时,window manager会报告插⼊window的矩形⼤⼩,
来确保你的内容不会被装饰物(如状态栏)掩盖.
这个flag⼀般⽤Window类的 tFlags(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可以在锁屏状态下显⽰
post production
这个flag会使得window⽐keyguard或其他锁屏界⾯具有更⾼的层级
可以配合FLAG_KEEP_SCREEN_ON使⽤,点亮屏幕,在显⽰keyguard window之前显⽰你的window.
可以配合FLAG_DISMISS_KEYGUARD使⽤来⾃动解锁没密码的keyguards
沙漠之舟的意思这个flag只能应⽤在最顶层的全屏window上
⽤⼈话说就是可以让window显⽰在锁屏界⾯上
//----------------------------------------------------
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.
//----------------------------------------------------
omd
//---------------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 t the window will accept for touch events outside of its bounds to be nt to other windows that also support split touch. When this flag is not t, the first pointer that goes do
wn determines the window to which all subquent touches go until all pointers go up. When this flag is t, each pointer (not necessarily the first) that goes down determines the window to which all subquent 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_ACCELERATEDsolute
//Constant Value: 16777216 (0x01000000)
表⽰这个window是否启动硬件加速,请求硬件加速但不能保证硬件加速⽣效
如果仅是⽤来启动硬件加速,可以在代码中控制,使⽤下⾯的代码给指定window启动硬件加速:
Window w = Window(); // in Activity’s onCreate() for instance
w.tFlags(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
//Constant Value: 268435456 (0x10000000)
设置flag启⽤local focus模式(我也不知道local focus mode是什么),在这种模式下window可以不依赖windowmanager独⽴的控制焦点,使⽤window的 tLocalFocus(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()的颜⾊,
//----------------------------------------------------

本文发布于:2023-06-10 03:18:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/139961.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:点击   事件   屏幕   设置   硬件加速   不会
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图