Android自定义View基础:ViewRoot、DecorView & Window的简介

944365-207a738cb165a2da.png

前言

  • 自定义View原理是Android开发者必须了解的基础,在了解自定义View之前,你需要有一定的知识储备。
  • 今天,本文将全面解析关于自定义View中基础:ViewRoot、DecorView & Window,希望你们会喜欢。

目录

944365-d0354efb1a6ddfcf.png
示意图

1. ViewRoot

1.1 简介

944365-b46c98a1c44620c7.png
示意图

1.2 特别注意

// 在主线程中,Activity对象被创建后:
// 1. 自动将DecorView添加到Window中 & 创建ViewRootImpll对象
root = new ViewRootImpl(view.getContent(),display);

// 3. 将ViewRootImpll对象与DecorView建立关联
root.setView(view,wparams,panelParentView)

2. DecorView

2.1 定义

顶层View,即 Android 视图树的根节点;同时也是 FrameLayout 的子类

2.2 作用

显示 & 加载布局。View层的事件都先经过DecorView,再传递到View

2.3 特别说明

内含1个竖直方向的LinearLayout,分为2部分:

  1. 上 = 标题栏(titlebar)
  2. 下 = 内容栏(content)
944365-4923b6377b032256.png
示意图

Activity中通过 setContentView()所设置的布局文件其实是被加到内容栏之中的,成为其唯一子View = id为content的FrameLayout

// 在代码中可通过content得到对应加载的布局

// 1. 得到content
ViewGroup content = (ViewGroup)findViewById(android.R.id.content);
// 2. 得到设置的View
ViewGroup rootView = (ViewGroup) content.getChildAt(0);

3. Window

944365-3d680d03d1fd9737
简介

4. Activity

944365-dd1d1de1f3eb9bb5
示意图

5. 之间关系

ViewRoot、DecorView、Window和Activity的关系非常重要。

5.1 总结

944365-aeeb7d69afb2cd63
示意图

5.2 之间的关系

944365-34992eb46bdf93e7.png
示意图

6. 总结


请点赞!因为你们的赞同/鼓励是我写作的最大动力!

相关文章阅读
Android事件分发机制详解:史上最全面、最易懂
Android开发:最全面、最易懂的Android屏幕适配解决方案

Android开发:史上最全的Android消息推送解决方案
Android开发:最全面、最易懂的Webview详解
Android开发:JSON简介及最全面解析方法!
Android四大组件:Service服务史上最全面解析
Android四大组件:BroadcastReceiver史上最全面解析


欢迎关注Carson_Ho的简书!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

944365-9b76fa3c52d478a7.png

转载于:https://www.jianshu.com/p/28d396a0f05f

猜你喜欢

转载自blog.csdn.net/weixin_34411563/article/details/91198822