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

在继承ViewGroup类时,需要重写两个方法,分别是onMeasure和onLayout。

1,在方法onMeasure中调用setMeasuredDimension方法

void android.view.View.setMeasuredDimension(int measuredWidth, int measuredHeight)

在onMeasure(int, int)中,必须调用setMeasuredDimension(int width, int height)来存储测量得到的宽度和高度值,如果没有这么去做会触发异常IllegalStateException。

2,在方法onMeasure中调用孩子的measure方法

void android.view.View.measure(int widthMeasureSpec, int heightMeasureSpec)

这个方法用来测量出view的大小。父view使用width参数和height参数来提供constraint信息。实际上,view的测量工作在onMeasure(int, int)方法中完成。因此,只有onMeasure(int, int)方法可以且必须被重写。参数widthMeasureSpec提供view的水平空间的规格说明,参数heightMeasureSpec提供view的垂直空间的规格说明。

3,解析onMeasure(int, int)方法

void android.view.View.onMeasure(int widthMeasureSpec, int heightMeasureSpec)

测量view及其内容来确定view的宽度和高度。这个方法在measure(int, int)中被调用,必须被重写来精确和有效的测量view的内容。

在重写这个方法时,必须调用setMeasuredDimension(int, int)来存储测量得到的宽度和高度值。执行失败会触发一个IllegalStateException异常。调用父view的onMeasure(int, int)是合法有效的用法。

view的基本测量数据默认取其背景尺寸,除非允许更大的尺寸。子view必须重写onMeasure(int, int)来提供其内容更加准确的测量数值。如果被重写,子类确保测量的height和width至少是view的最小高度和宽度(通过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()获取)。

4,解析onLayout(boolean, int, int, int, int)方法

void android.view.ViewGroup.onLayout(boolean changed, int l, int t, int r, int b)

调用场景:在view给其孩子设置尺寸和位置时被调用。子view,包括孩子在内,必须重写onLayout(boolean, int, int, int, int)方法,并且调用各自的layout(int, int, int, int)方法。

参数说明:参数changed表示view有新的尺寸或位置;参数l表示相对于父view的Left位置;参数t表示相对于父view的Top位置;参数r表示相对于父view的Right位置;参数b表示相对于父view的Bottom位置。.

5,解析View.MeasureSpec类

android.view.View.MeasureSpec

MeasureSpec对象,封装了layout规格说明,并且从父view传递给子view。每个MeasureSpec对象代表了width或height的规格。

MeasureSpec对象包含一个size和一个mode,其中mode可以取以下三个数值之一:

  • UNSPECIFIED,1073741824 [0x40000000],未加规定的,表示没有给子view添加任何规定。

  • EXACTLY,0 [0x0],精确的,表示父view为子view确定精确的尺寸。

  • AT_MOST,-2147483648 [0x80000000],子view可以在指定的尺寸内尽量大。

    6.

  • requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view重新调用他的onMeasure onLayout来对重新设置自己位置。

  • 特别的当view的layoutparameter发生改变,并且它的值还没能应用到view上,这时候适合调用这个方法。

转载于:https://my.oschina.net/fltsp/blog/492304

继承ViewGroup:重写onMeasure方法和onLayout、requestlayout方法相关推荐

  1. 为什么要重写hashCode()方法和equals()方法以及如何进行重写

    一.前言 本篇文章主要探讨的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法? 2.在什么情况下需要重写hashCode()方法和equals()方法? 3.如何 ...

  2. 为什么要重写hashcode方法和equals方法

    为什么要重写hashcode方法和equals方法 我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 ...

  3. 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe

    题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...

  4. HashSet要重写equals方法和hashCode方法

    注:重要笔记在代码中注释有 hashSet去重: 即判断两个对象是否相等 1:会先调用对象的hashCode方法获得hash的值,如果set中哈希表里面没有对应的hash值,则将次对象存入set中 2 ...

  5. Java基础语法:重写equals方法和hasCode方法

    目录 一.为什么需要重写equals和hasCode方法 二.equals和hasCode解读 1.equals方法 2.hasCode方法 三.重写 四.参考资料 一.为什么需要重写equals和h ...

  6. so把asp页面生成静态的html,23、asp系列课程--server.URLEncode方法和server.HTMLEncode方法...

    作者:杨凡 来自:杨凡博客 地址:blog.sina.com.cn/aboutshisan server.URLEncode方法和server.HTMLEncode方法可以对字符串进行编码. 我们一个 ...

  7. 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)...

    尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很 ...

  8. window.onload()方法和window.onscroll()方法

    也许你想成为太阳,可你却只是一颗星辰:也许你想成为大树,可你却是一棵小草.于是,你有些自卑.其实,你和别人一样,也是一片风景:做不了太阳,就做星辰,在自己的星座发光发热:做不了大树,就做小草,以自己的 ...

  9. java重写6,java重写equals()方法和hashCode()方法

    1.equals()方法和hashCode()方法是什么? equals()和hashCode()都是是Java中万物之源Object类中的方法: equals方法用于比较两个对象是否相同,Objec ...

最新文章

  1. python时间序列动图_手把手教你用Python进行时间序列分解和预测
  2. 如何打造BCH使用的刚性需求?
  3. 【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )
  4. PackStack安装OpenStack Pike
  5. 20165310_获奖感想与Java阶段性学习总结
  6. windows 下 MyEclipse 逆向工程生成hiberate 对应配置文件以及 javaBean。
  7. 算法的力量万变不离其宗 -- 李开复
  8. 浅谈数据库发展史和 OceanBase 的诞生
  9. Beta冲刺——day6
  10. 【软考2】Java语言的基本知识汇总
  11. Harmony OS — Text文本框
  12. 带视频加密功能的视频播放器
  13. 关于驻波比(VSWR)的详细解析
  14. android发现u盘自动安装apk,安卓自动识别U盘中APK文件并进行安装操作
  15. 分析功能强大的蛋白质结构预测软件Phyre2
  16. 饭店点餐系统之系统工作流程
  17. Android Studio 里sync下载慢,怎么办?
  18. 牛客:爬塔(STL)
  19. Android surfaceview 自定义相机 拍照(闪光灯、前后摄像头)
  20. 如何通过划分VLAN,有效规划企业网ip地址!

热门文章

  1. 知识图谱(六)——关系抽取
  2. python shell怎么换行_python shell:去除fasta文件的换行符
  3. 【Android Studio安装部署系列】八、Android Studio主题皮肤更换
  4. linux虚拟机时间不准的问题
  5. ASP NET 数据库访问
  6. Tomcat7调试运行环境搭建与源代码分析入门
  7. 深度 | 人工智能全局概览:通用智能的当前困境和未来可能
  8. handler机制的原理
  9. 哈,又一款超级简单的队列(MQ)实现方案来了~
  10. Juniper NetScreen 基于源NAT转换