自定义View之onMeasure()
来源:互联网 发布:股票个股分析软件 编辑:程序博客网 时间:2024/06/03 19:59
其实onMeasure()一般不需要重写,因为本来的宽高设值方式就很合理啊,除非你有一些特殊的、变态的要求,不过对其了解一些还是有必要的:
一、关于“onMeasure(MeasureSpec width,MeasureSpec height)的参数”是从哪里传过来的:
onMeasure()函数由包含这个View的具体的ViewGroup调用,因此值也是从这个ViewGroup中传入的。
当控件的容器正要放置该控件时调用.容器会问控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.
注:它也必须是从容器传过来的,不然,当宽或高取match_parent时,它的Size如何确定?因为它的Size是由“容器的宽高”减去“padding、margin、其它控件的宽高等”。
二、关于如何确定控件的宽高:
这就不得不了解一个类:MeasureSpec。
这个类里包含两个东西,Mode和Size。
int widthMode = MeasureSpec.getMode(widthMeasureSpec);//获得Modeint widthSize = MeasureSpec.getSize(widthMeasureSpec);//获得Size
Mode分为三种:
1、MeasureSpec.EXACTLY:当控件的长或宽指定为match_parent或者固定数值时,它的Mode为EXACTLY,此时得到的Size即为控件的长或宽。
2、MeasureSpec.AT_MOST:当控件的长或宽指定为wrap_content时,它的Mode为AT_MOST,此时得到的Size是控件的长或宽可设定的最大值。
3、MeasureSpec.UNSPECIFIED:我们可以随意指定控件的大小,不受容器的限制。很少用到。
在知道以上的长和宽的Size信息后,最终长和宽的值还是由你决定。决定好后,调用:
setMeasuredDimension(width,height);
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 自定义View之onMeasure()
- 别被不断改变的需求轮奸
- Android apk 反编译
- 1090. Highest Price in Supply Chain (25)解题报告
- 使用usb-creator-gtk创建U盘安装盘/启动盘
- PL/SQL--循环控制语句
- 自定义View之onMeasure()
- fork()和vfork()的学习
- 命名服务
- Android 实现按钮监听的几种方式
- [JAVA学习笔记-49]线程运行状态机
- CSS——!important
- android:中文转拼音(英文)
- Java中的Volatile关键字详解
- spring的懒加载和非懒加载