window类型

在Android系统中,无论是普通的Activity窗口,还是特殊的输入法窗口和壁纸窗口,它们都是被WindowManagerService服务组织在一个窗口堆栈中的,其中,Z轴位置较大的窗口排列在Z轴位置较小的窗口的上面。那么Z轴顺序如何决定?其实是WindowManager.LayoutParams构造函数中有个type,即窗口的类型决定了它在Z轴的高度。下面列举了一些常用的类型:

    public static final int TYPE_BASE_APPLICATION   = 1;
    public static final int TYPE_APPLICATION        = 2;
    public static final int TYPE_APPLICATION_STARTING = 3;

    public static final int FIRST_SUB_WINDOW = 1000;
    public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW;
    public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW + 1;

    public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW + 2;

    public static final int FIRST_SYSTEM_WINDOW     = 2000;

    public static final int TYPE_STATUS_BAR         = FIRST_SYSTEM_WINDOW;

    public static final int TYPE_SEARCH_BAR         = FIRST_SYSTEM_WINDOW+1;

    public static final int TYPE_PHONE              = FIRST_SYSTEM_WINDOW+2;

其中199,都是应用内窗口;10001999都是子窗口;2000开始都是系统级窗口。
应用内窗口,顾名思义,应用在应用内部,会跟随创建其的activity隐藏而隐藏,包括退入后台,例如Dialog就是用的TYPE_APPLICATION;
子窗口,是附着在View之上的窗口,必须有父View,且父View已经显示,例如PopupWindow用的就是TYPE_APPLICATION_PANEL;
系统级窗口,需要有 android:system_alert_window这个权限才能显示,和上面两种窗口不一样,不会随着activity的消失而消失。但是如果要在app进入后台后依然显示,很多ROM需要用户手动打开悬浮窗权限。

http://blog.csdn.net/april_12345/article/details/52933316
http://blog.csdn.net/Luoshengyang/article/details/8570428

你可能感兴趣的:(window类型)