View.onMeasure()

来源:互联网 发布:网络爬虫实战 编辑:程序博客网 时间:2024/06/03 09:26

在Android自定义view中onMeasure是一个常用到的方法,我们可以使用它来对view的width和height进行设置.
在onMeasure()中,我们使用MeasureSpec来辅助对view的width,height的测量,MeasureSpec是一个32位的int值,其中高2位为测量模式,低30位为测量大小.

MeasureSpec的模式:

  • EXACTLY
    精确值模式,当我们将view的width和height属性设置为具体的数值和match_parent时,系统使用的是EXACTLY模式.
  • AT_MOST
    最大值模式,当我们将view的width和height属性设置为wrap_content时控件的大小一般随着控件的子空间或内容的变化而变化,此时控件的尺寸只要不超过父控件允许的最大尺寸即可.
  • UNSPECIFIED
    不指定大小测量的模式,一般在绘制自定义view时使用.

view默认的onMeasure()方法只支持EXACTLY模式,如果要使用AT_MOST模式的话,必须重写onMeasure()方法.

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),                getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));}

通过在view中的onMeasure方法,我们可以发现,最后调用的是setMeasuredDimension(int,int)方法来给view这是高宽.所以在我们重写onMeasure()发法中,我们可以直接通过setMeasuredDimension(int,int)来给view自定义width,height.

0 0
原创粉丝点击