WindowManager(窗口管理服务),它是显示View的最底层,Toast,Activity,Dialog的底层都有用到了这个WindowManager。WindowManager里面主要是addView,removeView,updateViewLayout这几个方法来显示View,以及通过WindowManager.LayoutParams这个API来设置相关的属性。下文讲详细介绍。

WindowsManager

1、WindowsManager使用方法

1

2

3全屏设置

2、WindowManager的关联类

2.1、 WindowManager

先来看看WindowManager里面有什么。
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManager.java

WindowManager是一个接口,继承ViewManager。里面有一些实例属性和方法,还有一个LayoutParams占据着很大一部分。LayoutParams是一个序列化类。而且WindowManager里面的大部分都是隐藏的属性和方法,只给系统调用。

2.2、ViewManager

WindowManager继承ViewManager。ViewManager里面实际上只有三个方法:addViewupdateViewLayoutremoveView,分别对应着添加view、更新viewlayout、移走view。

\frameworks\base\core\java\android\view\ViewManager.java

2.3、WindowManagerImpl

那么WindowManager的实现类是哪个?是WindowManagerImpl。
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManagerImpl.java

可以看到实现类里面主要的参数是下面这几个。

里面最主要的是WindowManagerGlobal了,view的增删改都是由它完成的。
WindowManagerGlobal里面主要管理是一下一些参数。view的相关控制用ArrayList装载着。
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManagerGlobal.java

addView
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManagerGlobal.java

updateViewLayout
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManagerGlobal.java

removeView
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManagerGlobal.java

3、WindowManager 的一些属性

WindowManager.LayoutParams属性里面主要有Type属性和Flags属性。

Type表示Window的类型,Window有三种类型,分别是应用窗口、子窗口和系统窗口。
\frameworks\base\core\java\android\view\ViewManager.java

应用窗口从1开始,到99。子窗口范围为1000 ~ 1999 ,系统窗口范围为2000~2999。子窗口表示依赖于应用窗口的窗口,比如PopupWindow就是依赖于应用的子窗口。Android系统有个X,Y,Z轴的坐标体系。X表示横轴,Y表示竖轴,Z表示垂直于平面的轴。这些窗口数值对应的事Z轴。数字越大表示越靠近用户。从上面的数值可以看出,系统窗口是最靠近用户的,其次是子窗口,最后是应用窗口。
Flags参数表示Window的属性,控制着Window的显示特性。

Flags标识按位来增加,比如下面这这些。当几个功能叠加的时候可以用或运算。
flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE

不止这两个属性设置,还有softInputMode,gravity,horizontalMargin,verticalMargin,screenBrightness,buttonBrightness,rotationAnimation等等的参数设置。WindowManager.LayoutParams里面有addFlagsclearFlagssetColorMode等来控制这些属性的设置。
softInputMode是软键盘设置,可以看下它的几个参数。

分类: Android

发表评论

电子邮件地址不会被公开。