Android自定义View:ViewRoot、DecorView、Window区别是什么?

本文深入剖析自定义View基础:ViewRoot、DecorView与Window的角色及相互关系,揭示Android视图绘制与事件传递机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

目录

在这里插入图片描述


1. ViewRoot

1.1 简介

在这里插入图片描述

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)

在这里插入图片描述

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

在这里插入图片描述


4. Activity

在这里插入图片描述


5. 之间关系

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

5.1 总结

在这里插入图片描述

5.2 之间的关系

在这里插入图片描述


6. 总结

  • 本文全面解析关于自定义View中基础:ViewRoot、DecorView & Window
  • 接下来我将继续对自定义View的应用进行讲解,有兴趣的可以继续关注Carson_Ho的安卓开发笔记

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值