#.WindowManager
Android中用来管理Window的接口类,具体实现类是WindowManagerImpl,而最终是交给WindowManagerService来真实实现相应功能。
##.基本API:
1.addView(View, WindowManager.LayoutParams);
添加Window,并把View作为Window的内容,WindowManager.LayoutParams配置了窗口的参数信息。
2.updateViewLayout(View, WindowManager.LayoutParams);
更新指定Window的配置参数
3.removeView(View);
移除View对应的Window。
#.Window的属性
Window的属性定义在WindowManager.LayoutParams类中。相关属性有很多种,与应用开发最密切的有四类,分别是 Type(Window的类型)、 Flag(Window的标志)、 SoftInputMode(软键盘相关模式)、位置大小相关属性。
##.Window的类型
对应WindowManager.LayoutParams.type,Window的类型同时会决定Window的显示层级Z-Order。Window的类型有很多种,但整体分为三大类:1)ApplicationWindow(应用程序窗口):一般位于最底层,Z-Order在1-992)Sub Window(子窗口):子窗口必须依附于特定的父Window,Z-Order在1000-19993)SystemWindow(系统窗口): 系统级窗口一般位于最顶层,不会被其他的window遮住(如Toast),Z-Order在2000-2999。如果要弹出自定义系统级窗口需要动态申请权限。
1.应用程序窗口
典型的应用程序窗口就是Activity中的窗口。 类型如下:
// 应用程序 Window 的开始值
public static final int FIRST_APPLICATION_WINDOW = 1;
// 应用程序 Window 的基础值
public static final int TYPE_BASE_APPLICATION = 1;
// 普通的应用程序
public static final int TYPE_APPLICATION = 2;
// 特殊的应用程序窗口,当程序可以显示 Window 之前使用这个 Window 来显示一些东西
public static final int TYPE_APPLICATION_STARTING = 3;
// TYPE_APPLICATION 的变体,在应用程序显示之前,WindowManager 会等待这个 Window 绘制完毕
public static final int TYPE_DRAWN_APPLICATION = 4;
// 应用程序 Window 的结束值
public static final int LAST_APPLICATION_WINDOW = 99;
注意:Activity和Dialog中的Window的类型都是TYPE_APPLICATION,Dialog不是子窗口,但Dialog必须附属于某个Activity,用这个Activity作为Context来创建。
2.子窗口
子窗口不能独立存在,必须依附于特定的父Window才行,例如PopupWindow中的Window(类型