View.onMeasure方法如何在Android中使用

  介绍

本篇文章为大家展示了观点。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中使用