【问题标题】:What is an Android DecorView?什么是 Android DecorView?
【发布时间】:2014-06-10 04:58:48
【问题描述】:

http://developer.android.com/reference/android/view/Window.html#getDecorView():

检索顶层窗口装饰视图(包含标准窗口 框架/装饰和其中的客户内容),可以添加为 窗口管理器。

这令人费解。目前尚不清楚标准的“窗框/装饰”是什么。我不知道这是什么,确切地说,文档很糟糕。它是否存在于应用程序的窗口中?它是否围绕应用程序的窗口?

我从未见过带有明显窗口装饰的 Android 窗口。而“可以作为窗口添加”意味着装饰视图是一个窗口,但这与类层次结构相矛盾(View 不是Window 的子类。

那么交易是什么?装饰视图到底是什么?

【问题讨论】:

  • 这可能在对话框中最容易看到,尤其是在 Holo 之前。
  • 那么我认为操作栏是装饰视图的子项?
  • 原来action bar确实是decorview的子项
  • 工具栏和系统栏仍然如此吗?

标签: android window android-view


【解决方案1】:

装饰视图似乎包含屏幕分辨率?我得到 1920。

var verticalScreenRes = act.window.decorView.height.toFloat() // 1920

然后验证

adb -s emulator-5554 shell wm size
Physical size: 1080x1920

【讨论】:

    【解决方案2】:

    似乎最好定义它的地方之一是Romain Guy's Blog

    DecorView 是实际保存窗口背景可绘制对象的视图。从 Activity 调用 getWindow().setBackgroundDrawable() 通过更改 DecorView 的背景可绘制对象来更改窗口的背景。如前所述,此设置非常特定于当前的 Android 实现,并且可以在未来版本甚至其他设备上进行更改。

    【讨论】:

    • 我的 redux 是:装饰视图是 Window 视图层次结构的真正根。它既包含“装饰”(即窗口的标题(操作栏?),或对话框的“框架”(~= 绘制对话框框架的实际像素的视图,如 pre-Holo 中所见),还包含应用程序提供的内容视图。AFAIK 它完全存在于窗口的范围内,并且不包围它,并且它本身在任何意义上都不是一个窗口。
    • 我相信它负责安排布局和度量遍历。
    • @zgulser 是否有指向 DecorView 调度布局和措施的文档?