Window是什么
Abstract base class for a top-level window look and behavior policy.
An instance of this class should be used as the top-level view added to the window manager.
It provides standard UI policies such as a background, title area, default key processing, etc.
The only existing implementation of this abstract class is android.view.PhoneWindow, which you should instantiate when needing a Window.
public abstract class Window
翻译过来: Window 是顶级窗口外观和行为策略的抽象基类。它的实例应用作添加到 WindowManager 的顶级视图。它提供了标准的 UI 策略,例如背景、标题区域、默认按键处理等。 此抽象类的唯一现有实现是 android.view.PhoneWindow,您应该在需要 Window 时对其进行实例化。
通俗的理解:
window是android一个窗口的概念,可以理解为屏幕的一块显示区域。可以用于设置背景颜色,标题区域等。
通常我们熟悉的View体系需要依附在Window上才能展示,在这个角度上Window可以理解为一个View树的载体,多个Window通过Window本身大小,Z轴设置可以在屏幕上展示多个内容。
通过注释我们 知道 Window的实现类是PhoneWindow, 我们看看这个类是在哪里使用的:
PhoneWindow
Activity初始化中创建:
// Activity.java
final void attach(...) {
attachBaseContext(context);
// 1 创建 PhoneWindow对象
mWindow = new PhoneWindow(this, window, activityConfigCallback);
...
// 设置WindowManager (后续我们会展开WindowManager)
mWindow.setWindowManager(
(WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
mToken, mComponent.flattenToString(),
(info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
mWindowManager = mWindow.getWindowManager();
...
}
Dialog中创建:
Dialog(@UiContext @NonNull Context context, @StyleRes int themeResId,
boolean createContextThemeWrapper) {
...
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
// 1 创建phoneWindow对象
final Window w = new PhoneWindow(mContext);
mWindow = w;
...
// 2 设置WindowManager
w.setWindowManager(mWindowManager, null, null);
w.setGravity(Gravity.CENTER);
}
从这里我们可以了解到:
- 每个Activity都持有一个PhoneWindow对象
- 每个Dialog也持有一个PhoneWindow对象
总结:
- Window是Android一个显示窗口的含义,Viewy是依附在Window上显示的
- 每个Activity和Dialog都持有一个Window对象
Window的功能有哪些?,WindowManager和它是什么关系,它真正展示逻辑在哪里,我们下期分享。
备注:DisplayContent