android学习——MeasureSpec介绍及使用

翻译 2017年01月03日 12:08:01
一、MeasureSpc类说明
  SDK的介绍:MeasureSpc类封装了父View传递给子View的布局(layout)要求。每个MeasureSpc实例代表宽度或者高度

它有三种模式:
①、UNSPECIFIED(未指定),父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小;
②、EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小;
③、AT_MOST(至多),子元素至多达到指定大小的值。

常用的三个函数:
static int getMode(int measureSpec) : 根据提供的测量值(格式),提取模式(上述三个模式之一)
static int getSize(int measureSpec) : 根据提供的测量值(格式),提取大小值(这个大小也就是我们通常所说的大小)

static int makeMeasureSpec(int size,int mode) : 根据提供的大小值和模式,创建一个测量值(格式)  


MeasureSpec类的处理思路是:
右移运算,使int 类型的高两位表示模式的实际值,其余30位表示其余30位代表长或宽的实际值----可以是WRAP_CONTENT、MATCH_PARENT或具体大小exactly size。

通过掩码MODE_MASK进行与运算 “&”,取得模式(mode)以及长或宽(value)的实际值。

MeasureSpec . makeMeasureSpec 方法,实际上这个方法很简单:

1 public static int makeMeasureSpec(int size, int mode) {
2             return size + mode;
3      }


二、measure过程详解

UI框架开始绘制时,皆是从ViewRoot.java类开始绘制的:

ViewRoot类简要说明: 任何显示在设备中的窗口,例如:Activity、Dialog等,都包含一个ViewRoot实例,该类主要用来与远端 WindowManagerService交互以及控制(开始/销毁)绘制。

1、开始UI绘制 , 具体绘制方法则是:

//开始View绘制流程  
private void performTraversals(){  
    ...  
    //这两个值我们在后面讨论时,在回过头来看看是怎么赋值的。现在只需要记住其值MeasureSpec.makeMeasureSpec()构建的。  
    int childWidthMeasureSpec; //其值由MeasureSpec类构建 , makeMeasureSpec  
    int childHeightMeasureSpec;//其值由MeasureSpec类构建 , makeMeasureSpec  


    // Ask host how big it wants to be  
    host.measure(childWidthMeasureSpec, childHeightMeasureSpec);  
    ...  
}  
...  

View Code 

2、调用measure()方法去做一些前期准备 measure()方法原型定义在View.java类中,final修饰符修饰,其不能被重载:


相关文章推荐

Android MeasureSpec介绍及使用详解

说明: 一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。一个MeasureSpec由大小和模式组成。它有三种模式:UNSPECIF...
  • lovoo
  • lovoo
  • 2016年04月23日 16:38
  • 155

Android MeasureSpec介绍及使用说明

Android MeasureSpec介绍及使用说明

Android MeasureSpec介绍及使用

MeasureSpc类说明MeasureSpc类封装了父View传递给子View的布局(layout)要求。每个MeasureSpc实例代表宽度或者高度。它有三种模式: UNSPECIFIED(未指定...
  • jdsjlzx
  • jdsjlzx
  • 2016年12月01日 23:20
  • 1406

ANDROID自定义视图——onMeasure流程,MeasureSpec详解

简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置...

Android自定义视图——onMeasure流程,MeasureSpec详解

转自:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤...

ANDROID自定义视图——onMeasure流程,MeasureSpec详解

原文  http://blog.csdn.net/a396901990/article/details/36475213 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测...
  • gwe_f
  • gwe_f
  • 2015年04月26日 22:36
  • 236

ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记

ViewRoot,DecorView,MeasureSpec和View的工作原理。View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layou...

ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置...

ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

自定义视图详解。MeasureSpec,onMeasure,measureChildren等方法源码分析。

Android自定义视图(一)——onMeasure,MeasureSpec源码 流程 思路详解

简介:在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android学习——MeasureSpec介绍及使用
举报原因:
原因补充:

(最多只允许输入30个字)