Android入门之窗口类型

  • Post author:
  • Post category:其他



从WmS的角度看,一个窗口并不是Window类,而是一个View类。WmS收到用户消息后,需要把消息派发到窗口,View类本身并不能直接接收WmS传递过来的消息,真正接收用户消息的必须是IWindow类,而实现IWindow类的是ViewRoot.W类,每一个W内部都包含了一个View变量。


WmS并不介意该窗口(View)是属于哪个应用程序的,WmS会按一定的规则判断哪个窗口处于活动状态,然后把用户消息给W类,W类再把用户消息传递给内部的View变量,剩下的消息处理就由View对象完成。


Framework定义了三种窗口类型,三种类型的定义在WindowManager的LayoutParams中。


第一种窗口类型为应用窗口,所谓的应用窗口是指该窗口对应一个Activity,由于加载Activity是由AmS完成的,因此,对于应用程序来说,要创建一个应用类窗口,只能在Activity内部完成。


应用窗口包含以下几类:



定义



意义


FIRST_APPLICATION_WINDOW = 1

第一个普通应用窗口

TYPE_BASE_APPLICATION = 1

基窗口,所有其他类型的应用窗口将出现在基窗口上层

TYPE_APPLICATION = 2

普通应用窗口

TYPE_APPLICATION_STARTING = 3

应用程序启动时先显示此窗口,当真正的窗口配置完成后,此窗口被关闭

LAST_APPLICATION_WINDOW = 99

最后一个应用窗口


所有Activity默认的窗口类型都是TYPE_APPLICATION,WmS在进行窗口叠加时,会动态改变应用窗口的层值,但层值不会大于99。


第二种窗口类型是子窗口,子窗口是指该窗口必须要有一个父窗口,父窗口可以是一个应用类型窗口,也可以是任何其他类型的窗口。


子窗口包含以下几类:




定义



意义


FIRST_SUB_WINDOW = 1000

第一个子窗口

TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW

应用窗口的子窗口,PopupWindow的默认类型

TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW + 1

用来显示Media的窗口

TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW + 2

TYPE_APPLICATION_PANEL的子窗口

TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW + 3

OptionMenu、ContextMenu的默认类型

TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW + 4

TYPE_APPLICATION_MEDIA的重影窗口,显示在TYPE_APPLICATION_MEDIA和应用窗口之间

LAST_SUB_WINDOW = 1999

最后一个子窗口

创建子窗口时,客户端可以指定窗口类型介于1000-1999之间,而WmS在进行窗口叠加时,会动态调整层值。




第三种窗口类型是系统窗口,系统窗口不需要对应任何Activity,也不需要有父窗口,对于应用程序而言,理论上是无法创建系统窗口的,因为所有的应用程序都没有这个权限,然而系统进程却可以创建系统窗口。


系统窗口有以下类型:




定义



意义


FIRST_SYSTEM_WINDOW = 2000

第一个系统窗口

TYPE_STATUS_BAR = FIRST_SYSTEM_WINDOW

状态栏窗口

TYPE_SEARCH_BAR = FIRST_SYSTEM_WINDOW +1

搜索条窗口

TYPE_PHONE = FIRST_SYSTEM_WINDOW + 2

来电显示窗口

TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW + 3

警告对话框

TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW + 4

屏保

TYPE_TOAST = FIRST_SYSTEM_WINDOW + 5

Toast对应的窗口

TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW + 6

系统覆盖窗口,需要显示在所有窗口之上

TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW + 7

在屏幕保护下的来电显示窗口

TYPE_SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW + 8

滑动状态条后出现的窗口

TYPE_KEYGUARD_DIALOG = FIRST_SYSTEM_WINDOW + 9

屏保弹出的对话框

TYPE_SYSTEM_ERROR = FIRST_SYSTEM_WINDOW + 10

系统错误窗口

TYPE_INPUT_METHOD = FIRST_SYSTEM_WINDOW + 11

输入法窗口

TYPE_INPUT_METHOD_DIALOG = FIRST_SYSTEM_WINDOW + 12

输入法中备选框对应的窗口

TYPE_WALLPAPER = FIRST_SYSTEM_WINDOW + 13

墙纸对应的窗口

TYPE_STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW + 14

滑动状态条后出现的窗口

TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW + 15

安全系统覆盖窗口,显示在所有窗口之上。

LAST_SYSTEM_WINDOW = 2999

最后一个系统窗口



版权声明:本文为geloin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。