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修饰符修饰,其不能被重载:


MeasureSpec介绍及使用详解

一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。一个MeasureSpec由大小和模式组成。它有三种模式:UNSPECIFIED(未...
  • chenzhiqin20
  • chenzhiqin20
  • 2014年04月05日 16:05
  • 3413

深度学习小白——TensorFlow(一)简介

我选择tensorFlow作为我学习的第一个神经网络框架,恰巧最近Tensorflow支持了windows,所以让我的学习变得更加便捷。 我的主要参考文章有 http://blog.csdn.net/...
  • MargretWG
  • MargretWG
  • 2017年04月13日 19:42
  • 1351

DevExpress 学习 (一些主要控件说明)

1、 TestEdit: 一个单行文本编辑器。 常用属性: Name:该控件的名称。 Text:该控件中的内容。 Enabled:该控件是否激活。 Visible:控件是否可视。 pass...
  • u013031738
  • u013031738
  • 2013年12月05日 14:56
  • 2131

android学习——MeasureSpec介绍及使用

一、MeasureSpc类说明  SDK的介绍:MeasureSpc类封装了父View传递给子View的布局(layout)要求。每个MeasureSpc实例代表宽度或者高度 它有三种模式: ...
  • late0001
  • late0001
  • 2015年08月27日 19:53
  • 220

Android中自定义View的MeasureSpec介绍及使用详解

MeasureSpec介绍及使用详解 Posted on 2011-11-28 17:37 slider 阅读(13177) 评论(0) 编辑 收藏   一个MeasureSpec封装了父...
  • VIPqiangqiang
  • VIPqiangqiang
  • 2014年04月10日 17:53
  • 678

Android MeasureSpec介绍及使用说明

Android MeasureSpec介绍及使用说明
  • AND_YOU_with_ME
  • AND_YOU_with_ME
  • 2017年04月19日 14:36
  • 125

Android MeasureSpec介绍及使用详解

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

Android MeasureSpec介绍及使用

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

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

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

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

ViewRoot,DecorView,MeasureSpec和View的工作原理。View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layou...
  • L664675249
  • L664675249
  • 2016年03月01日 18:17
  • 2846
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android学习——MeasureSpec介绍及使用
举报原因:
原因补充:

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