美文网首页
View的测量模式

View的测量模式

作者: 李建彪 | 来源:发表于2017-08-22 20:41 被阅读0次

当我们开始绘制一个View的时候,我们要先思考一下,系统绘制是如何绘制出这些View的,我们都知道,我们画图形,就必须知道图形的位置和宽高大小,那么同样,系统在绘制View前也需要对View进行测量,即告诉系统需要绘制多大的View,这就涉及到我们现在要用的一个方法onMeasure()

Android系统提供了一个类----MeasureSpec,通过它来测量View,测量的模式有三种:

EXACTLY:精确模式 当我们将宽度和高度设置成了match_parent或者给定了具体的数值之后,系统使用的是精确模式
AT_MOST:最大值模式 当我们将宽高设置了wrap_content时,控件大小随着子控件或内容的大小变化而变化
UNSPECIFIED:不指定其大小测量模式,View想多大就多大,通常情况下在自定义View时才会使用

具体的看如下代码:

AT_MOST = wrap_content
EXACTLY = match_parent
EXACTLY = 20dp;

首先我们先看看系统的onMeasure方法做了什么事吧


看到一个很有用的方法:setMeasuredDimension()
再看系统默认给我们的控件设置的大小吧


我们可以看到 使用MeasureSpec类去获取控件的模式和大小
通过系统源码得知 如果我们没有设置控件大小 那么控件会在

AT_MOST和EXACTLY时占有父控件所有大小当指定了一个精确大小的时候 设置的值才会是我们设置的大小
看过上面源码 相信大家看到了两个很有用的方法:
int mode = MeasureSpec.getMode(heightMeasureSpec);
int size = MeasureSpec.getSize(heightMeasureSpec);
从MeasureSpec对象中获取具体的测量模式和大小
然后通过判断测量模式给出不同的测量值,当mode为EXACTLY时使用制定的size即可,当为其他两种模式的时候需要给它一个默认值,如果指定warp_content属性时,则需要取出我们指定的大小与size中最小的一个来作为测量值:

 if (mode == MeasureSpec.EXACTLY) {
            height = size;
        } else {
            height = 400;
            if (mode == MeasureSpec.AT_MOST) {
                height = Math.min(height, size);
            }
        }

相关文章

  • Android自定义View笔记

    View的测量: View测量模式有三种:EXACTLY,AT_MOST,UNSPECIFIED。一般测量都在on...

  • View 测量模式

    测量模式 EXACTLY :表示设置了精确的值,一般当childView设置其宽、高为精确值、match_pare...

  • View的自定义

    1.onMeasure 测量模式: // 当父view的模式为EXACITY时,父view强加给子view确切的值...

  • View的测量模式

    当我们开始绘制一个View的时候,我们要先思考一下,系统绘制是如何绘制出这些View的,我们都知道,我们画图形,就...

  • Android View 3种测量模式

    自定义View或者是ViewGroup的时候需要测量View的宽高,这个时候需要根据View的测量模式进行处理。V...

  • 自定义 view - 3大核心方法补充

    自定义 view 的3个核心方法 onMeasure根据 view 的测量模式计算确定 view 的宽高 onLa...

  • 自定义 view - 测量 onMeasure

    自定义 view 的3个核心方法 onMeasure根据 view 的测量模式计算确定 view 的宽高 onLa...

  • 自定义 view - 布局 onLayout

    自定义 view 的3个核心方法 onMeasure根据 view 的测量模式计算确定 view 的宽高 onLa...

  • 自定义View回掉函数

    备注: onMeasure:指定相关view的测量模式onSizeChanged:获取相关尺寸参数onFinish...

  • 安卓自定义view(二) - 测量

    view的测量过程 之所以先讲view的测量过程,是因为ViewGroup测量的时候是先把他的所有子view测量完...

网友评论

      本文标题:View的测量模式

      本文链接:https://www.haomeiwen.com/subject/jtfrdxtx.html