Android入门之窗口类型

        从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 + 2TYPE_APPLICATION_PANEL的子窗口
TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW + 3OptionMenu、ContextMenu的默认类型
TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW + 4TYPE_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 + 5Toast对应的窗口
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最后一个系统窗口



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值