在应用中,任何要显示的界面都要依附在Window上,比如Activity、Dialog、Toast都是在window中显示的。Window 是一个抽象类,表示一个窗口,它的具体实现类是 PhoneWindow。实现位于WindowManagerService 中,WindowManagerService位于Android系统架构的Framework层。
Window 分类
Window 有三种类型,分别是应用 Window、子 Window 和系统 Window。应用类 Window 对应一个 Acitivity,子 Window 不能单独存在,需要依附在特定的父 Window 中,比如常见的一些 Dialog 就是一个子 Window。系统 Window是需要声明权限才能创建的 Window,比如 Toast 和系统状态栏都是系统 Window。
Window添加子view
对 Window 的操作是通过 WindowManager 来完成的,WindowManager 是一个接口,它继承自只有三个方法的 ViewManager 接口,包括添加、删除、更新view:
public interface ViewManager{
public void addView(View view, ViewGroup.LayoutParams params);
public void updateViewLayout(View view, ViewGroup.LayoutParams params);
public void removeView(View view);
}
setContentView()在下层调用的就是windowManager的addview()方法。Window内部有叫decorview的根view,将setContentview()传入的view添加到decorvew中,就将view绑定到window中了。
网友评论