秒懂OnLayout

Android onLayout布局流程解析 onMeasure和onLayout的大致总结完了,在自定义View的时候最关键的是onLayout,因为无论你如何Measure这个View的大小,最后的决定权永远在onLayout手中,onLayout会决定具体View的大小和位置。当然onMeasure也很重要,有的情况控件的宽高不确定或者需要自定义,这时候需要我们人工Measure它。而在复杂的自定义View时,很多计算也需要在onMeasure中完成,并且些值会记录下来在onLayout中重新使用。 阅读详情

自定义控件系列:
秒懂OnMeasure
秒懂OnLayout
让自定义ViewGroup里的子控件支持Margin
让自定义ViewGroup支持Padding
自定义ViewGroup的一个综合实践 FlowLayout

知识点

  1. onLayout方法就是按照自己的意愿,循环遍历所有的子控件,把每个子控件排列好

核心代码是通过child.layout(左,上,右,下)函数来设置子控件的位置。

应用

1. 接着上文完成MyLinearLayout (竖向的LinearLayout)

上文已经通过重写onMeasure支持了的AT_MOST模式,还差重写onLayout就完成自定义ViewGroup了

 @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int top = 0;
        int count = getChildCount();
        for (int i = 0; i < count; i++) {

            View child = getChildAt(i);

            int childWidth = child.getMeasuredWidth();
            int childHeight = child.getMeasuredHeight();

            // 布局,就是设置好这个子控件的左上右下
            child.layout(0, top, childWidth, top + childHeight);
            top += childHeight;

        }
        
    }

ok,预览一下:
在这里插入图片描述

参考:
《Android自定义开发入门与实践》感谢大神的著作

Android layout和onLayout区别 Android生命周期流程图 使用者不同:layout是子类确定自己位置的方法,使用者为子类;onLayout是父类确定子类位置的方法,使用者为父类。 调用者不同:layout是在onMeasure方法之后,由父类调用执行;onLayout方法是在onSizeChanged方法之后,layout中判断size变化时调用。 使用习惯不同:一般layout方法不需要重写;而onLayout方法一般... 阅读详情

相关推荐

VN1630A硬件配置指南:手把手教你用CanApe搭建XCP标定工程(附ELF文件配置技巧)

本文详细介绍了如何使用VN1630A硬件和CanApe软件搭建XCP标定工程,包括硬件配置、CanApe工程创建、ELF文件处理及XCP协议层配置等关键步骤。特别针对实际项目中常见的错误和细节问题提供解决方案,帮助工程师高效完成ECU参数标定工作。

git9versioner的博客 1160

Android自定义控件之onLayout详解

    上一篇我们分析了onMeasure的具体调用流程,这里我们接着分析自定义控件的另一个方法:onlayout,onLayout的目的是确定子View在父View中的位置,因此我们的分析还是从ViewGroup的代表Linealayout为入口分析整个过程。一.源码分析    Linealayout的onLayout方法如下:还是同样的分了两个方向,我们用垂直方向来做代表进行分析,由于代码过长...

qq_36120901的博客 3629

[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目

最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。

Andius的博客 8215

android 自定义View学习一之onMeasure和onLayout

本文主要作为一个回忆笔记存在,不是从一开始的源码研究,所以是一个结论笔记。 通常来说我们创建一个activity的布局层次:

qq_34606099的博客 2089

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决)

本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。

solidity8miner的博客 286

PubMedBERT:生物医学NLP中的垂直领域预训练实践与性能突破

本文深入探讨了PubMedBERT在生物医学NLP领域的应用与性能突破。作为专为生物医学文本设计的预训练模型,PubMedBERT通过全词掩码策略和BLURB基准测试,显著提升了命名实体识别、关系抽取等任务的准确率。文章还提供了PubMedBERT的实战应用案例和代码示例,展示了其在医学文献检索和电子病历结构化中的卓越表现。

kite3的博客 286

Android自定义View--onLayout

在谈如何使用onLayout方法前,先简单回忆一下知识点: View视图结构: View视图可以是单一的一个如TextView,也可以是一个视图组(ViewGroup)如LinearLayout。 如图:对于多View的视图他的结构是树形结构,最顶层是ViewGroup,ViewGroup下可能有多个ViewGroup或View。 这个树的概念很重要,因为无论我们是在测量大小或是调整布局的时候都是从树的顶端开始一层一层,一个分支一个分支的进行(树形递归)。 Layout(源码分析): Lay

zenmela2011的专栏 1422

基于FPGA的cy7c68013a双向通信实验

基于FPGA的cy7c68013a双向通信实验     本实验是基于FPGA的cy7c68013a的USB双向通信实验,以前折腾过一段时间cy7c68013a,没有入门时感觉好难,入门了就会感觉很简单。本教程主要内容:     1.cy7c68013a的固件编写,以及生成iic固件和下载固件。     2.cy7c68013a的slave模式,以及他的读写时序     3.cy7c6801...

乘风的博客 3万+

一个小案例明白onLayout()、onMeasure()方法的作用

目 录(本篇字数:1189) 介绍 一、onLayout() 二、onMeasure() 介绍 onLayout()、onMeasure()这两个方法是我们自定义View的关键,也许你知道它是怎么使用,但不知道它为什么要这样使用?我们在看一些书籍和源码的时候,经常会看到它的出现,今天,我们就来讲解它在自定义View中起到的真正作用。 ...

weixin_34054931的博客 1218

Xilinx的DDR4 IP

Xilinx的DDR4 IP

weixin_39896700的博客 4459

1. BES2700ZP概述

恒玄BES2700采用RTX5操作系统,配合mindmics算法或者自研算法。

雪飞_海 4472

04. onLayout介绍

掘金:https://juejin.im/user/499639464759898简书:http://www.jianshu.com/u/92a2412be53e邮箱:[934137388@qq.com]

qq_35829566的博客 942

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 287

Android自定义控件之onLayout

Android自定义控件之onLayout

fjjjyf的博客 2021

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android onlayout参数

2.  重载onMeasure()方法 为什么要重载onMeasure()方法这里就不赘述了,上一篇文章已经讲过,这里需要注意的是,自定义ViewGroup的onMeasure()方法中,除了计算自身的尺寸外,还需要调用measureChildren()函数来计算子控件的尺寸。 onMeasure()的定义不是本文的讨论重点,因此这里我直接使用默认的onMeasure()定义,当然me

3211

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

自定义View之onLayout方法学习

关于onLayout的学习,也是在基于View视图树的递归调用实现。 本篇想说明的是,不去深究View源码关于onLayout,以及layout方法的实现原理。知道大概,目的是在会用。但是需要了解并掌握View内部关于onLayout方法的相关API使用。 在ViewGroup中,onLayout是一个抽象方法,所以如果继承了ViewGroup类,除了添加构造方法外,还必须要重写onLayou

刘淏卿的专栏 4798

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

onLayout过程学习

View 的layout方法 @SuppressWarnings({"unchecked"}) public void layout(int l, int t, int r, int b) { if ((mPrivateFlags3 & PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) { onMeasu

u014623470的专栏 837

android onlayout 参数,android onlayout参数

2. 重载onMeasure()方法为什么要重载onMeasure()方法这里就不赘述了,上一篇文章已经讲过,这里需要注意的是,自定义ViewGroup的onMeasure()方法中,除了计算自身的尺寸外,还需要调用measureChildren()函数来计算子控件的尺寸。onMeasure()的定义不是本文的讨论重点,因此这里我直接使用默认的onMeasure()定义,当然measureChi...

weixin_39593469的博客 505

onMeasure()、onLayout()

前言:   自定义控件的三大方法: 测量: onMeasure(): 测量自己的大小,为正式布局提供建议 布局: onLayout(): 使用layout()函数对所有子控件布局 绘制: onDraw(): 根据布局的位置绘图 onDraw() 里面是绘制的操作,可以看下其他的文章,下面来了解onMeasure()和onLayout()方法。 一、o...

疾风剑豪 1379

Android onLayout、layout区别

onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用子View的layout方法实现布局。在实际开发中,一般要配合onMeasure测量方法一起使用。 onLayout方法: @Override protected abstract void onLayout(boole...

android开发笔记 1275

Android onLayout()布局流程解析

Android onLayout()布局流程解析 文章目录Android onLayout()布局流程解析1.组件布局流程的那些结论2. 源码解析 1.组件布局流程的那些结论 先看结论再看分析 1.)layout流程始于ViewRootImpl的performLayout()方法,该方法会调用根View(DecorView)的layout()方法进行布局,因为DecorView是ViewGroup(FrameLayout),所以layout流程来到了ViewGroup(其实调用的是父类View类)的la

weixin_43864176的博客 1462

基于FrameLayout的onLayout分析

概述: 之前分析过activity调用setContentView之后的流程和基于FrameLayout的onMeasure流程分析,onMeasure流程走完之后,布局文件中的各个控件的宽度和高度就都测量完成了,接下来就是布局了,布局的功能就是确定每个控件的摆放位置,这里也就是上下左右,left,top,bottom,right。这一步进行完成后控件在屏幕上的位置就确定了,如下是流程图: 调用...

搬砖的老牛 582

Android onLayout()

Called from layout when this view should assign a size and position to each of its children onLayout()方法的注释就是安排自己的子View的位置,我们继承View的时候好像很少用到这个玩意。因为只是写一个控件根本不会存在子View的问题。 接手别人的代码有个FlowLayout,搜索的时候出现历史记录的类似的View,但是换行的时候会出现问题。所以觉得可以自己搞个试试。 ...

zhangmiaoping23的专栏 938

ViewGroup的onLayout、layout方法

onLayout、layout方法简介 onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用子View的layout方法实现布局。在实际开发中,一般要配合onMeasure测量方法一起使用。 onLayout方法: @Override protected abst

丁丁的专栏 3577

Android中的OnMeasure及OnLayout

为什么80%的码农都做不了架构师?>>> ...

weixin_34211761的博客 371

Android的onLayout、layout方法讲解

onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用子View的layout方法实现布局。在实际开发中,一般要配合onMeasure测量方法一起使用。   onLayout方法: @Override protected abstract void onLayout(

青春的光与影 1万+
上一篇: 秒懂OnMeasure
下一篇: 让自定义ViewGroup里的子控件支持Margin
Android_Study_OK
博客等级 码龄11年 91粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值