位置: 编程技术 - 正文

Android百分比布局源代码解析(android百分比布局)

编辑:rootadmin

推荐整理分享Android百分比布局源代码解析(android百分比布局),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:百分比布局的单位是什么,安卓百分百,android百分比布局 弃用,android 百分比,百分比手机,android百分百布局,android百分百布局,android百分比布局,内容如对您有帮助,希望把文章链接给更多的朋友!

本文为原创,转载请注明出自:小妖森的博客

与marginStart的区别看这里。&#;得注意的是这些百分比都是相对于父布局来说的。

下面开始看源代码以PercentRelativeLayout为例

代码不是很多,可以看到PercentRelativeLayout继承自RelativeLayout,但是由于加入了百分比特性,所以也要自定义LayoutParams,其继承自相应Layout的LayoutParams。我们按照view的绘制流程就行分析。

首先是onMeasure方法

我们看到首先调用了mHelper.adjustChildren(widthMeasureSpec, heightMeasureSpec)我们跟进源码

这里是先拿到自己的宽和高放在widthHint和heightHint中备用,然后遍历每个子view拿到LayoutParams,之后取得PercentLayoutInfo,有同学可能会问LayoutParams以及PercentLayoutInfo是在哪里初始化的,我们去看上面的generateLayoutParams方法,这个方法是系统回调方法,在这时我们初始化了LayoutParams,在其构造方法中调用了PercentLayoutHelper.getPercentLayoutInfo(c, attrs)为PercentLayoutInfo赋&#;,我们接着跟进查看源码。

对于经常自定义view的同学来说,代码是不是很熟悉?就是把百分比属性封装到PercentLayoutInfo中了,我们回过头去接着看adjustChildren方法,接下来就是对params判断,是否包含margin属性,如果包含则调用fillMarginLayoutParams方法,否则fillLayoutParams方法。先来看fillMarginLayoutParams方法。

在一开始先调用了fillLayoutParams方法,这个方法在下面会进行分析。fillMarginLayoutParams先把xml中写的marginLeft、marginTop等信息保存到了mPreservedParams中,然后根据百分比重新设置margin。再看fillLayoutParams这个和fillMarginLayoutParams方法的思路是一样的,把xml中的layout_width、layout_height保存到mPreservedParams中,然后根据百分比重新设置width和height。现在我们可以知道实现百分比特性的关键部分就是这。widthHint * this.widthPercent其中widthHint是PercentRelativeLayout的宽度widthPercent是你在xml中为子view设置的百分比。

adjustChildren方法分析完,我们回到onMeasure方法中,之后又调用了super.onMeasure(widthMeasureSpec, heightMeasureSpec),对每个子view进行测量,接下来又做了一个操作我们看

跟进handleMeasuredStateTooSmall方法中Android百分比布局源代码解析(android百分比布局)

这个方法的作用是对于设置了百分比的view,如果测量得到的宽度或者高度太小并且在布局文件中你的layout_width或者layout_height设置的是WRAP_CONTENT的话,就会把这params的宽或者高设置成WRAP_CONTENT,然后对所有的子view进行重新测量。

shouldHandleMeasuredWidthTooSmall方法的代码。

onMeasure方法已经分析完成,接下来就是onLayout方法了。

在onLayout方法中,除了调用super之外,还调用了restoreOriginalParams()方法,从字面的意思看,恢复原来的params再看restoreMarginLayoutParams

restoreLayoutParams

我们看,这里就是把params恢复成之前存储在mPreservedParams中的信息。对此不太理解这样做的目的是什么。

好了。PercentRelativeLayout的代码已经分析完成,其实我们可以仿照这个来写自己的ViewGroup,在Google为我们提供的percetn-supprot-lib中只有PercentRelativeLayout和PercentFrameLayout两个布局,留给我们自己发挥的余地还很大。在我的github中我加入了PercentLinearLayout布局。

最后上一张效果图,摘自Github

结束。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

uleb、sleb和ulebp1编码格式介绍 在程序中,一般使用位比特位来表示一个整型的数。不过,一般能够使用到的整数都不会太大,使用比特位来表示就有点太浪费了。对于普通计算机

在Windows下搭建Android开发环境 随着移动互联网的迅速发展,前端的概念已发生很大的变化,已不仅仅局限在网页端。而Android系统作为智能机市场的老大,作为前端开发工程师,非常

Android基础之AsyncTask的doInBackground方法参数详解 AsyncTask的使用方法和理解1、对于耗时的操作,我们的一般方法是开启子线程。如果需要更新UI,则需要使用handler2、如果耗时的操作太多,那么我们需要

标签: android百分比布局

本文链接地址:https://www.jiuchutong.com/biancheng/379564.html 转载请保留说明!

上一篇:android问题解决(android遇到的难题)

下一篇:uleb128、sleb128和uleb128p1编码格式介绍

  • 哪些收据可以入帐
  • 发票已抵扣但对方要红冲后续原发票要拿回来吗
  • 税费返还计入什么费用
  • 劳务公司收到劳务费怎么做账
  • 资本公积可以随时撤出来吗
  • 企业所得税营业税金及附加包括
  • 人员工资薪金所得税计算税款
  • 增值税怎样报税
  • 销售开红字的账务处理
  • 企业接受捐赠的账务处理
  • 增值税发票验证
  • 行政单位年初预算怎么做
  • 营改增后税金由哪几项费用组成
  • 青苗补偿 税
  • 记账凭证填制的内容
  • 预收款转营业外收入要交增值税吗
  • 为什么收到发票
  • 电子发票增加开票项目
  • 公司是否有审计资质
  • 党费专用账户可以收取转账费用吗
  • 与权益法核算相关的累计净损益
  • 零星工程实施流程
  • 客户的佣金
  • 员工给公司代垫的款项分录
  • 企业支付方式有几种
  • 事业单位财政补助收入会计分录
  • 运输业什么进项税抵扣
  • php公众号
  • 发票金额大于报销金额违法吗
  • ptssvc.exe - ptssvc是什么进程 有什么用
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • videojs自定义按钮
  • csinsmnt.exe进程的作用介绍 csinsmnt是什么进程
  • 物业公司成本费用
  • 财务收支审批制度主要包括
  • 物业公司购买空调合法吗
  • thinkphp登录
  • 以前年度少记税金及附加
  • 猿类作文
  • 2023前端面试题目
  • 显示已申报未导入
  • 购买工程物资是什么费用
  • 会计信息不采集有什么后果
  • 增值税发票上多了一个点能刮掉吗
  • Windows上PostgreSQL安装配置教程
  • 增值税无票收入负数预警值
  • 企业影响工程成本的原因
  • 关于sqlserver数据库服务器登录账户的说法错误的是
  • 销货方和供货方的区别
  • 新开企业如何开发票
  • 进口货物的会计分录
  • 研发支出如何做账
  • 银行汇票计入什么会计科目
  • 小规模纳税人取得普通发票可以抵扣吗
  • 以前年度损益调整账务处理分录
  • 合同章盖成公章
  • 向非关联企业捐赠现金能不能抵扣
  • 账薄的使用规则
  • macbook macos
  • fedora gnome
  • freebsd的软件管理工具ports详解
  • ubuntu和windows文件互传
  • win10系统下如何打开internet(ISS)信息服务
  • mac如何打开程序菜单
  • windows10累积更新很慢
  • win10桌面图标无法正常显示
  • android开发环境的搭建步骤
  • cocos 2.5d
  • Unity3D中Javascript的基本使用与介绍详解
  • node.js在网页制作中的作用
  • css中边界margin的多种定义方法
  • css中文字垂直排列
  • js表单序列化
  • socket怎么用
  • shell脚本检测文件是否存在
  • python中else语句
  • position属性含义
  • 广西地方税务局决算公开表
  • 增值税发票冲红是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设