学习路上对WindowManager的学习

WindowManager.LayoutParams.type

用于确定窗口在屏幕上的显示层次

FIRST_APPLICATION_WINDOW

普通应用的第一个窗口

TYPE_BASE_APPLICATION

作为所有应用基础的窗口, 其他应用窗口都在其上

TYPE_APPLICATION

普通应用窗口. token必须为Activity的token, 指明该窗口属于谁

TYPE_APPLICATION_STARTING

应用启动时显示的窗口. 用于系统在应用能够显示之前显示一些东西

LAST_APPLICATION_WINDOW

应用最后一种窗口类型

FIRST_SUB_WINDOW

子窗口

TYPE_APPLICATION_PANEL

在应用窗口之上的面板窗口, 出现在所依附的窗口之上

TYPE_APPLICATION_MEDIA

显示媒体(如视频)的窗口, 在他们依附的窗口之下显示

TYPE_APPLICATION_SUB_PANEL

应用窗口之上的子面板窗口, 显示在所依附的窗口和其他面板之上

TYPE_APPLICATION_ATTACHED_DIALOG

类似TYPE_APPLICATION_PANEL, 但会作为顶层窗口, 而不是容器的子窗口

TYPE_APPLICATION_MEDIA_OVERLAY

隐藏

在媒体窗口上显示覆盖层的窗口

显示在TYPE_APPLICATION_MEDIA和应用窗口之间

TYPE_APPLICATION_ABOVE_SUB_PANEL

一个子面板窗口, 在应用窗口和子面板窗口之上

LAST_SUB_WINDOW

最后一个子窗口

FIRST_SYSTEM_WINDOW

第一个系统窗口

TYPE_STATUS_BAR

状态栏

只能有一个状态栏窗口. 放置在屏幕上方, 其他所有窗口都在其之下

TYPE_SEARCH_BAR

搜索条

只能有一个搜索条窗口, 放置在屏幕顶层

TYPE_PHONE

电话窗口

这是非应用窗口, 用于来电的界面

该窗口通常置于所有应用之上, 但在状态栏下

TYPE_SYSTEM_ALERT

系统窗口, 例如低电量警告弹窗, 在应用窗口之上

TYPE_KEYGUARD

锁屏窗口

TYPE_TOAST

透明通知. 不会拦截触摸事件, 可以向下透传

TYPE_SYSTEM_OVERLAY

系统覆盖窗口, 在所有东西之上. 该窗口必须禁止获取输入焦点, 否则会变成锁屏

TYPE_PRIORITY_PHONE

优先级电话, 即使锁屏也会显示

该窗口必须禁止获取输入焦点, 否则会变成锁屏

TYPE_SYSTEM_DIALOG

状态栏拉出的面板

TYPE_KEYGUARD_DIALOG

锁屏

TYPE_SYSTEM_ERROR

系统错误窗口, 在所有内容之上

TYPE_INPUT_METHOD

输入法窗口, 在普通UI之上

可以缩放

TYPE_INPUT_METHOD_DIALOG

输入法对话框窗口, 在当前输入法窗口之上

TYPE_WALLPAPER

壁纸窗口, 在任意窗口之下, 壁纸之上

TYPE_STATUS_BAR_PANEL

状态栏拉出的面板

TYPE_SECURE_SYSTEM_OVERLAY

安全的系统覆盖窗口, 在所有内容之上

必须禁止获取输入焦点, 否则会变成锁屏

同TYPE_SYSTEM_OVERLAY类似, 区别是只允许系统创建这种覆盖层, 应用无法创建

TYPE_DRAG

拖拽窗口

最多有一个, 在所有窗口之上

TYPE_STATUS_BAR_SUB_PANEL

状态栏拉出的面板, 在状态栏之下

TYPE_POINTER

鼠标指针

TYPE_NAVIGATION_BAR

导航条

TYPE_VOLUME_OVERLAY

调整音量时显示的音量窗口

TYPE_BOOT_PROGRESS

隐藏

启动进度对话框, 在全局任何事物之上

TYPE_INPUT_CONSUMER

消费输入事件的窗口

TYPE_DREAM

隐藏

屏保窗口, 在锁屏之上

TYPE_NAVIGATION_BAR_PANEL

导航条面板

TYPE_DISPLAY_OVERLAY

显示覆盖窗口, 用于模拟第二个显示设备

TYPE_MAGNIFICATION_OVERLAY

放大覆盖窗口

用于突出放大的部分

TYPE_KEYGUARD_SCRIM

隐藏

锁屏scrim窗口, 当锁屏需要重启时显示

TYPE_PRIVATE_PRESENTATION

Presentation窗口

TYPE_VOICE_INTERACTION

隐藏

语音互动窗口

TYPE_ACCESSIBILITY_OVERLAY

辅助功能覆盖层

TYPE_VOICE_INTERACTION_STARTING

隐藏

语音互动开始窗口

TYPE_DOCK_DIVIDER

隐藏

托盘窗口, 仅系统进程拥有

TYPE_QS_DIALOG

类似TYPE_APPLICATION_ATTACHED_DIALOG, 但用于快速设置

TYPE_SCREENSHOT

隐藏

同TYPE_DREAM类似, 但用于截屏

WindowManager.LayoutParams.flags

用于确定窗口的行为

FLAG_ALLOW_LOCK_WHILE_SCREEN_ON

当窗口对用户可见时, 允许锁屏.

可以单独使用, 也可以和FLAG_KEEP_SCREEN_ON和FLAG_SHOW_WHEN_LOCKED结合使用

FLAG_DIM_BEHIND

该窗口以下的内容都会变暗

可以使用dimAmount来控制变暗的程度

FLAG_BLUR_BEHIND

失效了, 不再支持

该窗口以下的内容都会模糊

FLAG_NOT_FOCUSABLE

该窗口不可获取按键输入焦点, 因此用户无法向其发送按键或按钮事件. 这些事件会被窗口以下的控件获取.

该flag同时会启动FLAG_NOT_TOUCH_MODAL, 无论你是否显式的设置

设置该flag同时暗示着该窗口不再需要同输入法交互, 因此该窗口和输入法窗口会以Z轴方式叠放(一般该窗口会覆盖在输入法窗口之上)

可以使用FLAG_ALT_FOCUSABLE_IM来修改这个行为

FLAG_NOT_TOUCHABLE

该窗口不可接收任何触摸事件

FLAG_NOT_TOUCH_MODAL

允许任何在该窗口之外的触摸事件传递到该窗口以下的控件, 即使该窗口是focusable的(即没有设置FLAG_NOT_FOCUSABLE).

否则该窗口会消费所有的触摸事件, 无论触摸是否在窗口之内

FLAG_TOUCHABLE_WHEN_WAKING

已经过时, 现在没有任何效果

如果设备处于睡眠中, 此时第一次点击屏幕的事件将会被该窗口接收

通常第一次触摸事件会被系统消费, 因为用户无法看见他们点击的是什么

FLAG_KEEP_SCREEN_ON

当窗口对于用户可见时, 保持设备屏幕常亮

FLAG_LAYOUT_IN_SCREEN

将窗口放置在整个屏幕中, 忽略状态栏等周边装饰边框.

窗口内容必须定位正确, 才能获取到装饰边框信息

FLAG_LAYOUT_NO_LIMITS

允许窗口扩展到屏幕之外

FLAG_FULLSCREEN

当该窗口显示时, 隐藏所有屏幕装饰(如状态栏), 允许窗口使用整个屏幕

当带有该flag的窗口是顶层窗口时, 状态栏会被隐藏

全屏窗口会忽略SOFT_INPUT_ADJUST_RESIZE对于softInputMode的值

窗口会一直保持全屏, 且不能缩放

可以通过theme属性来控制, 如Theme_Black_NoTitleBar_Fullscreen等

FLAG_FORCE_NOT_FULLSCREEN

覆盖FLAG_FULLSCREEN, 并强制显示屏幕装饰(如状态栏)

FLAG_DITHER

过时, 不再使用

开启图像抖动

FLAG_SECURE

将窗口内容作为安全内容, 阻止窗口出现在截屏, 或是被不安全的显示器显示

FLAG_SCALED

可以根据布局参数进行拉伸

FLAG_IGNORE_CHEEK_PRESSES

用于在用户将屏幕贴近脸部时, 防止误按

FLAG_LAYOUT_INSET_DECOR

仅同FLAG_LAYOUT_IN_SCREEN一起使用.

窗口可能出现在装饰下面(如状态栏下面), 使用这个flag后, 窗口会确保不会被装饰物覆盖

FLAG_ALT_FOCUSABLE_IM

反转FLAG_NOT_FOCUSABLE的交互状态.

即, 如果同时设置了本flag和FLAG_NOT_FOCUSABLE, 则窗口表现为需要同输入法交互, 同时会被至于输入法之下

如果设置了本flag而没有设置FLAG_NOT_FOCUSABLE, 则窗口表现为不需要同输入法交互, 同时会被至于输入法之上

FLAG_WATCH_OUTSIDE_TOUCH

如果设置了FLAG_NOT_TOUCH_MODAL, 那么可以同时设置此flag来接收窗口之外发生的MotionEvent.ACTION_OUTSIDE事件

注意, 你不会接收到完整的down/move/up手势, 只会接收到按下位置的ACTION_OUTSIDE事件

FLAG_SHOW_WHEN_LOCKED

当锁屏时, 允许窗口显示

窗口优先于锁屏

可以同FLAG_KEEP_SCREEN_ON一起使用, 来保持屏幕常亮并在显示锁屏之前显示该窗口

可以同FLAG_DISMISS_KEYGUARD一起使用, 来取消非安全的锁屏

该flag只能应用于最顶层的全屏窗口

FLAG_SHOW_WALLPAPER

要求系统壁纸显示在窗口之下

窗口必须是透明的, 才可以看到壁纸

该flag只保证壁纸存在

可以通过theme属性来设置, 如Theme_Wallpaper_NoTitleBar等

FLAG_TURN_SCREEN_ON

当窗口被添加或从不可见到可见状态时, 会点亮屏幕

FLAG_DISMISS_KEYGUARD

禁用锁屏, 除非是非安全锁屏

与FLAG_SHOW_WHEN_LOCKED正相反

如果锁屏当前是激活的, 并且是安全锁屏(需要解锁的), 那么用户仍需要进行解锁才能看到窗口, 除非设置了FLAG_SHOW_WHEN_LOCKED

FLAG_SPLIT_TOUCH

窗口会接收窗口之外的多点触摸事件

FLAG_HARDWARE_ACCELERATED

对窗口启用硬件加速

FLAG_LAYOUT_IN_OVERSCAN

允许窗口扩展到overscan区域

FLAG_TRANSLUCENT_STATUS

要求状态栏透明

FLAG_TRANSLUCENT_NAVIGATION

要求导航栏透明

FLAG_LOCAL_FOCUS_MODE

允许独立于window manager来控制焦点事件

通常该模式的窗口不能从window manager获取触摸/按键事件, 但能够通过Window#injectInputEvent(InputEvent)来获取本地注入事件

FLAG_SLIPPERY

隐藏

允许触摸从一个窗口划出到另一个窗口

该flag仅对当前窗口生效

触摸可以划出, 但无法再划入

FLAG_LAYOUT_ATTACHED_IN_DECOR

当布局依附于窗口时, 所依附的窗口可能会覆盖在屏幕装饰之上, 比如导航栏. 设置此flag后, window manager将在decor窗口内对所依附的窗口进行布局, 这样便不会覆盖在屏幕装饰上

FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

指示该窗口用于绘制系统状态栏的背景

如果设置此flag, 系统状态栏会变为透明背景, 窗口中响应的区域会被Window#getStatusBarColor()和Window#getNavigationBarColor()的颜色所填充

WindowManager.LayoutParams.softInputMode

用于确定窗口和输入法之间的关系

SOFT_INPUT_MASK_STATE

指定输入法的覆盖层, 确定输入法区域是否可见的代码

SOFT_INPUT_STATE_UNSPECIFIED

输入法的可见状态为: 未指定状态

SOFT_INPUT_STATE_UNCHANGED

输入法的可见状态为: 不改变输入法当前状态

SOFT_INPUT_STATE_HIDDEN

输入法的可见状态为: 用户进入窗口时, 隐藏所有输入法

SOFT_INPUT_STATE_ALWAYS_HIDDEN

输入法的可见状态为: 窗口获取焦点时, 隐藏所有输入法

SOFT_INPUT_STATE_VISIBLE

输入法的可见状态为: 用户进入窗口时, 显示输入法

SOFT_INPUT_STATE_ALWAYS_VISIBLE

输入法的可见状态为: 当窗口获取输入焦点时, 显示输入法

SOFT_INPUT_MASK_ADJUST

指定窗口是否应该根据输入法进行调整的代码

SOFT_INPUT_ADJUST_UNSPECIFIED

窗口调整设置为: 未指定, 系统会尝试进行选择

SOFT_INPUT_ADJUST_RESIZE

窗口调整设置为: 当显示输入法时, 允许窗口被缩放, 使得窗口的内容不会被输入法覆盖

不能同SOFT_INPUT_ADJUST_PAN一起使用

如果窗口布局属性包含FLAG_FULLSCREEN, 该选项会被忽略, 窗口不会缩放, 而是保持全屏

SOFT_INPUT_ADJUST_PAN

窗口调整设置为: 当显示输入法时, 移动窗口使得输入焦点可见, 而不会缩放窗口

不能同SOFT_INPUT_ADJUST_RESIZE一起使用

SOFT_INPUT_ADJUST_NOTHING

窗口调整设置为: 当显示输入法时, 既不缩放, 也不移动

SOFT_INPUT_IS_FORWARD_NAVIGATION

用户导航到此窗口时的配置代码. 通常有系统配置, 除非你需要自定义. 当窗口显示后, 该配置会清除

ActivityInfo.screenOrientation

用于确定窗口的方向

SCREEN_ORIENTATION_UNSPECIFIED

不指定屏幕方向, 跟随系统

SCREEN_ORIENTATION_LANDSCAPE

默认的横向(听筒在左, 按键在右)

SCREEN_ORIENTATION_PORTRAIT

默认的竖向(听筒在上, 按键在下, 不包括听筒在下, 按键在上)

SCREEN_ORIENTATION_REVERSE_LANDSCAPE

与默认相反的横向(听筒在右, 按键在左)

SCREEN_ORIENTATION_REVERSE_PORTRAIT

与默认相反的竖向(实际和SCREEN_ORIENTATION_PORTRAIT一样)

SCREEN_ORIENTATION_SENSOR

重力传感器感知的方向(除听筒在下, 按键在上的3个方向)

SCREEN_ORIENTATION_NOSENSOR

不使用传感器方向

SCREEN_ORIENTATION_SENSOR_LANDSCAPE

重力方向的横向(听筒在左, 按键在右 / 听筒在右, 按键在左)

SCREEN_ORIENTATION_SENSOR_PORTRAIT

重力方向的竖向(听筒在上, 按键在下, 不包括听筒在下, 按键在上)

SCREEN_ORIENTATION_FULL_SENSOR

重力方向(听筒在上, 按键在下 / 听筒在下, 按键在上 / 听筒在左, 按键在右 / 听筒在右, 按键在左)

SCREEN_ORIENTATION_USER

用户设置的方向

SCREEN_ORIENTATION_USER_LANDSCAPE

用户设置的横向

SCREEN_ORIENTATION_USER_PORTRAIT

用户设置的竖向

SCREEN_ORIENTATION_FULL_USER

用户设置的4个方向(听筒在上, 按键在下 / 听筒在下, 按键在上 / 听筒在左, 按键在右 / 听筒在右, 按键在左)

SCREEN_ORIENTATION_BEHIND

当前界面下的Activity的方向

SCREEN_ORIENTATION_LOCKED

锁定当前方向



转自https://blog.lixplor.com/2015/10/06/android-window-manager/

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

推荐阅读更多精彩内容