view工作原理-计算视图大小的过程(onMeasure)

view的视图有两种情况:


  • 内容型视图:由视图的内容决定其大小。
  • 图形型视图:父视图为view动态调整大小。
    ### measure的本质

把视图布局使用的“相对值”转化成具体值的过程,即把WRAP_CONTENT,MATCH_PARENT转化为具体的值。

measure内部的设计思路

这里写图片描述
再来看一下View中measure()函数原型:

public final void measure(int widthMeasureSpec, int heightMeasureSpec);

当父视图对子视图进行measure操作时,会调用子视图的measure()方法。该函数的意思是父视图为子视图所提供的measure的”规格”,因为父视图最终为子视图提供的”窗口”大小是由父视图和子视图共同决定的。该值有32位组成,高16位保存的是specMode, 低16位保存spcMode。
spceMode有三种:

  • MeasureSpec.EXACTLY: “确定的”, 父视图希望子视图的大小应该是spec中指定的。在一般情况下, View的设计者应该遵守指示,将View的measureHeight和measuredWidth设置成指定的值。
  • MeasureSpec.AT_MOST:”最多”,子视图最多是specSize中指定的值。
  • MeasureSpec.UNSPECIFIED: “没有限制”, 此时View的设计者可以根据自身的特性设置视图的大小。
    以上介绍measureSpec的语义,该参数是父视图传递给子视图的,看一下measureSpec是如何产生的:

ViewRoot中,调用host.measure()函数,参数分别是局部变量childWidthMeasureSpec和childHeightMeasureSpec,这两个变量的赋值最初是通过调用getRootMeasureSpec()函数获得的:

childWidthMeasureSpec = getRootMeasureSpec(desiredWindowWidth, lp.width);
childHeightMeasureSpec = getRootMeasureSpec(desiredWindowWidth, lp.height);

ViewGroup中的measureChildWidthMargins()

  1. 调用child.getLayoutParams()获得子视图的LayoutParams属性。
  2. 调用两次getChildMeasureSpec()函数,分别计算出该子视图的宽度和高度的spec。
  3. 调用child.measure()函数。子视图可以重载onMeasure()函数,并调用setMeasureDimension()函数设置任意大小的布局,这将成为子视图的最终布局大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转载]使用.net 2003中的ngen.exe编译.net程序

ngen.exe程序为.net 2003自带, 在:/windows/microsoft.net/framework/v1.1.4322目录下ngen.exe ngen能把.net框架的东西编译成机器码.... 网友:Visual Studio .NET 2003程序的运行速度怎么样,我有一个感觉,V…

基于Redis实现分布式锁实战

背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问&#x…

数据分析 绩效_如何在绩效改善中使用数据分析

数据分析 绩效Imagine you need to do a bank transaction, but the website is so slow. The page takes so much time to load, all you can see is a blue circle.想象您需要进行银行交易,但是网站是如此缓慢。 该页面需要花费很多时间来加载,您只能看…

隐私策略_隐私图标

隐私策略During its 2020 Worldwide Developers Conference, Apple spent time on one of today’s hottest topics — privacy. During the past couple of years, Apple has been rolling out various public campaigns aiming to position itself as a company that respect…

Java中的数组

一、数组的定义type[] arrayName;type arrayName[]; 推荐第一种 二、数组的初始化 含义:所谓的初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值 (1)静态初始化:arrayName new type[…

您一直在寻找5+个简单的一线工具来提升Python可视化效果

Insightful and aesthetic visualizations don’t have to be a pain to create. This article will prevent 5 simple one-liners you can add to your code to increase its style and informational value.富有洞察力和美学的可视化不必费心创建。 本文将防止您添加到代码中…

用C#编写的代码经C#编译器后,并非生成本地代码而是生成托管代码

用C#编写的代码经C#编译器后,并非生成本地代码而是生成托管代码。也就是说,程序集在打包时是连同CLR一起打包的。在客户端的机器上,CLR一行行的读取IL,在读取每行IL时,CLR利用JIT编译器将IL编译成本地的CPU指令。若要节…

figma 安装插件_彩色滤光片Figma插件,用于色盲

figma 安装插件So as a UX Designer, it is important to design with disabilities in mind. One of these is color blindness. It is important to make sure important information on your product is legible to everyone. This is why I like using this tool:因此&…

服务器运维

1.服务器和网站漏洞检测,对Web漏洞、弱口令、潜在的恶意行为、违法信息等进行定期扫描;代码的定期检查,漏洞检查及服务器安全加固 2.服务器数据备份,包括网站程序文件备份,数据库文件备份、配置文件备份,如…

产品观念:更好的捕鼠器_故事很重要:为什么您需要成为更好的讲故事的人

产品观念:更好的捕鼠器重点 (Top highlight)Telling a compelling story helps you get your point across effectively else you get lost in translation.讲一个引人入胜的故事可以帮助您有效地传达观点,否则您会迷失在翻译中。 Great stories happen…

7月15号day7总结

今天复习了springMVC的框架搭建。 思维导图: 转载于:https://www.cnblogs.com/kangy123/p/9315919.html

关于注意力的问题

问题:一旦持续的注意力分散和精力无法集中成为习惯性动作,这将成为一个严重的问题。 实质:加强有意识的集中程度和持续时间,尽量避免无意识注意对大脑的干扰。 不要浪费注意力。大脑以天为周期,每天注意力是有限的。T…

设计师的10种范式转变

For $250, a business can pay a graphic designer to create a logo for their business. Or, for $10,000 a business can hire a graphic designer to form a design strategy that contextually places the business’s branding in a stronghold against the market it’s…

面向Tableau开发人员的Python简要介绍(第2部分)

用PYTHON探索数据 (EXPLORING DATA WITH PYTHON) And we’re back! Let’s pick up where we left off in the first article of this series and use the visual we built there as a starting point.我们回来了! 让我们从在本系列的第一篇文章中停下来的地方开始&…

GAC中的所有的Assembly都会存放在系统目录%winroot%/assembly下面

是的,GAC中的所有的Assembly都会存放在系统目录"%winroot%/assembly下面。放在系统目录下的好处之一是可以让系统管理员通过用户权限来控制Assembly的访问。 关于GAC本身,上面redcaff_l所引述的一段话正是MSDN中对GAC的定义。GAC全称是Global A…

Mysql(三) Mysq慢查询日志

Mysql Slow Query Log MYSQL慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执…

绘制基础知识-canvas paint

先来看一下Canvas Canvas 用来提供draw方法的调用。绘制东西需要4个基本的组建:一个bitmap用来存放像素,一个canvas用来提供draw方法的调用(往bitmap里写入),原始绘制元素(e.g.Rect, Path, text,Bitmap), 一个paint。 …

Python - 调试Python代码的方法

调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错。让程序一部分一部分地运行起来。从核心功能开始,写一点,运行一点,再修改一点。利用工具,例如一些IDE中的调试功能,提高调试效率。Python …

设计组合中的10个严重错误可能会导致您丧命

As an agency co-founder and design lead, I’ve been participating in many recruitment processes. I’ve seen hundreds of portfolios and CVs of aspiring designers. If you’re applying for a UI designer position, it is good to have some things in mind and to …

netflix_Netflix的计算因果推论

netflixJeffrey Wong, Colin McFarland杰弗里黄 , 科林麦克法兰 Every Netflix data scientist, whether their background is from biology, psychology, physics, economics, math, statistics, or biostatistics, has made meaningful contributions to the way…