1

Android入门之窗口类型

 3 years ago
source link: http://yuanfentiank789.github.io/2017/04/24/windowtype/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Android入门之窗口类型 - JackPeng博客

更详细的了解请参考:http://blog.csdn.net/ritterliu/article/details/39318859

        从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 最后一个系统窗口

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK