本篇文章为大家展示了观点。onMeasure方法如何在Android中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> Android View.onMeasure方法详解及实例强>
视图在屏幕上显示出来要先经过测量(计算)和布局(布局)。
1,什么时候调用onMeasure方法?
当控件的父元素正要放置该控件时调用。父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec。
这两个参数指明控件可获得的空间以及关于这个空间描述的元数据。
更好的方法是你传递视图的高度和宽度到setMeasuredDimension方法里,这样可以直接告诉父控件,需要多大地方放置子控件。
接下来的代码片段给出了如何重写onMeasure。注意,调用的本地空方法是来计算高度和宽度的。它们会译解widthHeightSpec和heightMeasureSpec值,并计算出合适的高度和宽度值。
@Override 保护空白> int specMode=MeasureSpec.getMode (measureSpec); int specSize=MeasureSpec.getSize (measureSpec);
依据specMode的值,(measureSpec有3种模式分别是不明,到底和AT_MOST)
- <李> 李> <李> 李> <李> 李>
2,那么这些模式和我们平时设置的布局参数宽和wrap_content有什么关系呢?
经过代码测试就知道,当我们设置宽度或高度为宽和时,容器在布局时调用子视图的衡量方法传入的模式是,因为子视图会占据剩余容器的空间,所以它大小是确定的。
而当设置为wrap_content时,容器传进去的是AT_MOST,表示子视图的大小最多是多少,这样子视图会根据这个上限来设置自己的尺寸。当子视图的大小设置为精确值时,容器传入的是完全正确,而measureSpec的未指定的模式目前还没有发现在什么情况下使用只
,,视图的onMeasure方法默认行为是当模式为不明时,设置尺寸为mMinWidth(通常为0)或者背景可拉的的最小尺寸,当模式为完全或者AT_MOST时,尺寸设置为传入的MeasureSpec的大小只
,,有个观念需要纠正的是,宽和应该是子视图会占据剩下容器的空间,而不会覆盖前面已布局好的其他看空间,当然后面布局子视图就没有空间给分配了,所以宽和属性对布局顺序很重要。以前所想的是把所有容器的空间都占满了,难怪谷歌在2.2版本里把宽和的名字改为match_parent。
在两种情况下,你必须绝对的处理这些限制。在一些情况下,它可能会返回超出这些限制的尺寸,在这种情况下,你可以让父元素选择如何对待超出的观点,使用裁剪还是滚动等技术。
接下来的框架代码给出了处理视图测量的典型实现:
java代码:
@Override 保护空白>上述内容就是视图。onMeasure方法如何在Android中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。View.onMeasure方法如何在Android中使用