View及ViewGroup的布局方法及相互关系

View和ViewGroup,View绘制流程解析 View是绘制在屏幕上的用户能与之交互的一个对象,它代表了用户界面组件的一块可绘制的空间块,每一个空间块在屏幕上占据一个长方 形区域。View 的绘制流程是从 ViewRootImpl 的 performTraversals() 方法开始的,它经过测量(measure)、放置(layout)和绘制(draw)三个过程才能把一个 View 绘制出来,measure() 方法用于测量 View 的宽高,layout() 用于确定 View 在父容器中的放置位置,draw() 负责做具体的绘制操作。 阅读详情

布局时两次遍历
     第一次measure,测试child所需空间
     第二次layout,给child安排空间


方法之间的相互关系,重点是measure和layout

~~~~第一遍是measure~~~~~~~~~~~
View类
     measure()设置为final,禁止被派生类override
          onMeasure()必须override,计算自己的大小
               setMeasuredDimension()必须被调用,以此来设置在根View类中的measure尺寸变量
               注意,measure的结果可以通过getMeasuredWidth()查看,是一个View类中变量


ViewGroup类派生自View类,且实现了两个接口
     没有measure()
     没有onMeasure(),说明使用父类onMeasure()

     measureChildren()找不到调用者,可能仅仅是一个示范?


LinearLayout派生自ViewGroup类
     覆盖onMeasure()
          调用child.measure()也即子View的measures()来深度遍历
          调用setMeasuredDimension()来设置在根View类中的measure尺寸变量

TextView类派生自View类
     没有measure(),被禁止覆盖
     覆盖onMeasure()
          setMeasuredDimension(width, height);


~~~~第二遍是layout~~~~~~~~~~~
View类
     layout(),没有被设置为final,但注释提示派生类不要覆盖,而是去覆盖onLayout(),但实际上ViewGroup覆盖了
          onLayout()是个空函数,如果派生类有child则覆盖本方法,并在其中调用child.layout
          通知注册的监听器


ViewGroup类
     layout(),调用了父类layout(),没有调用自己的onLayout(),不过可能辗转调回自己的onLayout()?
     protected abstract void onLayout(boolean changed, int l, int t, int r, int b)注意这里变成抽象方法了,也即派生类必须覆盖
     

LinearLayout派生自ViewGroup类
     onLayout()
          child.layout()


TextView类派生自View类
     无layout(),也没有onLayout(),因为没有子View


Android中View和ViewGroup介绍 图1 窗口系统的客户端DecorView实际上是一个ViewGroup。在依存关系上来讲,对单个主窗口来讲,DecorView是Top-Level View。View并不是关注的重点,重要的是我们需要知道消息分发路径是建立在什么关系上的。View的成员变量mParent用来管理View上级关系的。而ViewGroup顾名思义就是一组View的管理,于是在ViewGroup构建了焦点管理和子View节点数组。 阅读详情

相关推荐

Android 中自定义ViewGroup实现流式布局的效果

前言: 自定义View与自定义ViewGroup的区别: 自定义View:在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View。这个是控件。 自定义ViewGroup:一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout。这个是组件。 自定义View的绘制流程图如下: 下面来实现流式布局,定义一个类FlowLayout继承自ViewGroup,重写里面的相关方法,实现流式布局的效果。

路宇的博客 2303

Android View关系

View 是Android所有显示相关的基类。View在屏幕上占据一个矩形区域,负责绘图和 事件处理。可以说View类是用户接口类中最重要的一个类。Android 各种View之间的关系如以下的图。

ddxsfxdz022的专栏 249

ViewGroup交换子控件

一个小Demo,后续可以依据此Demo的思想实现列表进行子控件的切换。

android 自定义viewgroup 布局,Android 自定义ViewGroup(一)

自定义viewgroup,这个东西可以说简单也简单,说复杂也复杂。主要是因为用到所以复习了一下,那就顺便做个笔记。暂时只讲简单的用法一.重要方法(1)onMeasure 设置viewgroup的大小(2)onLayout 设置如何摆放子View(3)generateLayoutParams 设置LayoutParams最重要的是前面两个方法,所以说viewgroup很简单,你只需要知道在onMe...

weixin_39613692的博客 735

Chapter 19 Digital Phase-Locked Loops

数字锁相环 Digital Phase-Locked Loops, 就是根据原来时钟信号, 产生新的时钟信号, which is locked or synchronized. (align 参考时钟边沿 or 在中间)

2304_76736886的博客 973

绿盾注册机 使用手册

在很多涉及工程设计的单位(如建筑、模具、电路、广告等),电子图纸的应用极为普遍,而电子图纸的丢失、被盗对企业利益的影响是显而易见的,如果被竞争对手获取,甚至可能造成致命的打击。因此,对于这类企业,电子图纸的保密显得至关重要。绿盾信息安全管理软件充分考虑了电子图纸的各种可能传播途径,制定了针对性的解决方案,从而保证了电子图纸的安全。 我们总结了电子图纸的各种传播途径以及相应的对策,有如下几点:

998

自定义ViewGroup——自定义布局

自定义ViewGroup和自定义View的步骤差不多。 自定义ViewGroup需要重写onMeasure方法测量子控件的宽高和自己的宽高,然后在onLayout方法中摆放子控件。 自定义View则是需要重写onMeasure根据测量模式和父控件给出的建议的宽高值计算自己的宽高,然后在父控件为其指定的区域绘制自己的图形。 自定义ViewGroup的步骤: ①. 继承ViewGroup,覆盖构造...

weixin_40763897的博客 2984

欧姆龙NX控制器与Sysmac studio的电机配置方法

使用歐姆龍NX控制器與Sysmac studio控制電機簡單運動 <上> — 環境配置0. 前言1. 實際硬件連接2. Sysmac studio 配置2.1 新建工程2.2 通信設置2.2.1 軟件內通信設置2.2.2 上位機本地通信設置 0. 前言 筆者最近需要使用到歐姆龍的多軸運動控制器來控制電機運動,但網路上關於Sysmac studio的教程或文章較為零散,作為初學者的筆者難以消化,故在稍微會用軟件後撰寫本文,為自己留個筆記,同時希望能夠幫助到需要的人。 1.本文面向買了歐姆龍控制器

weixin_46005653的博客 1万+

View与ViewGroup的关系

Android的UI界面都是由View和ViewGroup及其派生类组合而成的。   其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.   View对象是Android平台中用户界面体现的基础单位。   View类是它称为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。   ViewGr...

橘子丶 3867

SAP 清账凭证 完整生成逻辑(超详细原理 + 底层规则 + 分录逻辑 + 互清特殊规则)

【SAP清账凭证核心逻辑摘要】(149字) SAP清账凭证生成遵循两大类型:1)资金往来对冲型(如F-32/F-44互清),强制生成含完整借贷分录的独立凭证,通过AUGDT/AUGBL字段绑定未清项,典型场景如应收冲应付(借:应付账款 贷:应收账款);2)纯核销型(如F.13自动清账),仅标记行项目状态不产生实际分录。关键规则:①仅未清项管理科目可清账;②互清必须配置主数据关联;③差额清账自动补差(折扣/汇差);④原始凭证永不修改,仅更新BSIK/BSAD等表状态。清账凭证均保留可追溯性,支持FBRA重置还

金牌架构师 543

基于聚类特征工程的水果销量预测:聚类算法对比与多模型评估

水果销量预测研究:聚类分群与多模型对比 摘要 本研究提出了一种融合聚类分析与机器学习的水果销量预测方法。基于包含12个维度的销售数据集,首先采用K-Means、BIRCH和DBSCAN三种聚类算法对水果品类进行分群,通过轮廓系数等指标评估显示BIRCH算法表现最优(0.387)。随后针对不同群组构建差异化特征工程,并比较XGBoost、LightGBM和LSTM三种预测模型性能。实验结果表明:基于聚类特征工程的LightGBM模型预测效果最佳(RMSE=2.34,R²=0.87).

huanghm88的专栏 137

Android中Activity Window View ViewGroup之间的关系

Activity:是Android四大组件之一,用于展示一个与用户交互的界面                   ----展示界面                   ----与用户交互 Activity相当于控制器,负责调用业务类的方法。简单的业务可以直接在Activity中处理。 Activity通过内置是Window对象的setContentView(资源位置.资源类型.资源)方法来

ning_xian_hong的专栏 1231

YOLOv13改进策略【Head】| (独家改进)结合 ICME-2024 中的PPA注意力模块,自研带有注意力机制的小目标检测头

本文记录的是利用PPA (并行补丁感知注意模块)改进YOLOv13的检测头。通过改进传统卷积,形成带有注意力机制的小目标检测头,使模型能够更好地关注小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch size参数实现局部和全局分支的区分,计算非重叠

Limiiiing的博客 480

android-view介绍 - 随心

Activity是Android程序的显示层,每一个显示窗口都是一个Activity;可是Activity本身无法显示在屏幕上,我们可以把它理解成是一个抽象层,一个壳子;就譬如一个JSP页面,它本身并没有显示出来任何东西,负责显示的是他生成的HTML标签。那么Android里谁才是真正显示出来的部分?--是View和ViewGroup,而ViewGroup其实也是View的子类。 有了上述的

Super_Level的专栏 605

C#的GDI+绘图详解

/消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。

weixin_50920631的博客 3457

MimicKit 人形机器人强化学习全身模仿控制算法使用教程

本文介绍了MimicKit运动模仿算法框架的使用指南。主要内容包括:1)安装IsaacGym和依赖项;2)训练模型命令及参数说明;3)测试模型的方法;4)分布式训练配置;5)使用TensorBoard可视化日志;6)动作数据格式说明。该框架支持DeepMimic、AMP、ASE、ADD等算法,包含PPO、AWR等强化学习算法,适用于物理仿真角色动画控制研究。

机器人控制与仿真应用 1203

Android学习 - Android中View绘制流程

1、UI框架基本概念: Activity:基本的页面单元,Activity包含一个Window,window上可以绘制各种view; View:最基本的UI组件,表示屏幕上的一个矩形区域; Window:表示顶层窗口,管理界面的显示和事件的响应;每个Activity均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口。 PhoneWindow:该类继承于W

wolflz的专栏 657

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android视图学习---Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起

本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的。           下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口),一个Dialog,    一个Toast,一个Menu菜单等。       首先对相关类的作用进行一下简单介绍:         

wust小吴 422

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起

本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的。           下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口),一个Dialog,    一个Toast,一个Menu菜单等。         首先对相关类的作用进行一下简单介绍:            Window 类  

u010944680的专栏 472

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android中View绘制流程以及invalidate()等相关方法分析

本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的。           下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口),一个Dialog,    一个Toast,一个Menu菜单等。       首先对相关类的作用进行一下简单介绍:         

wuyahui0124505的专栏 501

基础篇——View和ViewGroup的区别

写代码的四点: 1.明确需求。要做什么? 2.分析思路。要怎么做?(1,2,3……) 3.确定步骤。每一个思路要用到哪些语句、方法和对象。 4.代码实现。用具体的语言代码将思路实现出来。 学习新技术的四点: 1.该技术是什么? 2.该技术有什么特点?(使用需注意的方面) 3.该技术怎么使用?(写Demo) ...

一个灵活的胖子MrWang 3万+

面试官:你知道的我就不问,layout怎么布局的?viewGroup和view的layout方法又有什么不同?

前言 上次我们说到View的Mearsure流程,今天接着说说layout。 关于layout,很多朋友知道它是负责布局的,那么具体是怎么布局的?viewGroup和view的layout方法又有什么不同?一起来看看吧。 View layout方法 首先,还是从ViewRootImpl说起,界面的绘制会触发performMeasure、performLayout方法,而在performLayout方法中就会调用mView的layout方法开始一层层View的布局工作。 private voi..

嘴巴吃糖了 2011

Android Studio开发学习(四)——— View与ViewGroup

本期简单了解View和ViewGroup,以及简单使用自定义view和简单使用自定义ViewGroup。下期了解认识LinearLayout(线性布局)

m0_73391179的博客 2209

ViewGroup是如何加载布局中的view?

LayoutInflater如何加载布局?上面链接中的内容是此篇文章的基础,如果对LayoutInflater原理不熟悉可以去参考一下。1.问题由来本来在看CoordinatorLayout的源码,然后发现它内部定义了一个LayoutParams。那么问题就来了,在布局文件中的childView是没有置顶LayoutParams的,那么只有在childView创建的时候,由CoordinatorLa

javine的专栏 3226

Android基础——View和ViewGroup

布局和控件基本属性布局什么是布局?线性布局控件什么是控件 基本属性 属性 值 备注 android:id @+id/string 1.@+id/string表示定义一个名为string的id 2. @id/string表示引用名为string的id android:layout_width 1. match_parent2.wrap_content 1.match_parent表示与父元素一样宽 2.wrap_content表示宽度刚好包裹内容 android:layout_he

松仔Log的博客 2074

View与ViewGroup的概念

Android开发中,View和ViewGroup是构建UI的核心组件。View是单一UI元素(如TextView、Button),负责显示内容和处理交互;ViewGroup则是容器(如LinearLayout、ConstraintLayout),用于组织多个View。两者区别在于:View不能包含子元素,而ViewGroup可以嵌套管理其他View。开发中既可通过XML布局定义,也可动态创建,现代开发推荐使用Jetpack Compose框架。掌握两者的特性和用法是构建Android界面的基础。

m0_57545130的博客 869
上一篇: Android官方ApiDemo中animation部分代码要点整理
下一篇: 我的第一个开源组件:一个抹出来的快捷菜单按钮
Max2005
博客等级 码龄22年 45粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值