美文网首页
应用 Activity 界面 布局层次 - 结合 Window

应用 Activity 界面 布局层次 - 结合 Window

作者: 行走中的3卡 | 来源:发表于2022-11-25 14:42 被阅读0次

    基于之前的文章
    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 -----------------------

    相关文章

      网友评论

          本文标题:应用 Activity 界面 布局层次 - 结合 Window

          本文链接:https://www.haomeiwen.com/subject/svgzxdtx.html