应用 Activity 界面 布局层次 - 结合 Window
基于之前的文章
Android Window / WindowManager 小结
了解到 Activity 需要 依附 Window 上, 可以看出对 Window 进行了 封装, Window 又对DecorView进行了封装。
Activity 的内容是 通过 setContentView 设置, 而它最终 是 调用 Window 的同名方法.
因此,可以从分析 Activity 界面布局 层次 入手, 分析 Window 中 DecorView 相关的层次结构.
1. 整体层次
参考一个空的 Activity
activity layout.PNG
针对上面的,大体可以分成 3 部分
(1)状态栏
(2)内容 (上图黑色框部分)
----标题
----具体内容 (上图红色框部分)
(3)导航栏
这个三部分的设置,都在 Window(PhoneWindow) 中有定义:
(2) 是通过应用传入 布局资源 或者 视图资源 设置的,
(1)(3) 虽然内容是 应用无关, 但是确可以 设置 它们的 背景,以达到 和 应用界面风格 统一的效果.
参考https://www.jianshu.com/p/b67a20c6a4fe 里介绍的 Window 定义的 API
2. Layout 层次:
使用 AndroidStudio 对上面的 Activity 界面进行 布局资源的分析, 可以得到如下的层次结构:
android.widget.FrameLayout
----android.widget.LinearLayout 内容
--------android.widget.FrameLayout
----------------android.view.ViewGroup com.example.xxx:id/decor_content_parent
------------------------android.widget.FrameLayout com.example.xxx:id/action_bar_container 标题栏
------------------------android.widget.FrameLayout android:id/content 具体内容
--------android.view.View android:id/statusBarBackground 状态栏
--------android.view.View android:id/navigationBarBackground 导航栏
重点是decor_content_parent, 会在 PhoneWindow 加载成 DecorContentParent 对象,
然后把我们要设置的 内容加载 到 android:id/content 中。
代码的分析会后面的文章介绍.
---------- End -----------------------