一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。一个MeasureSpec由大小和模式组成。它有三种模式:
UNSPECIFIED:父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小。
EXACTLY:父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小。
AT_MOST:子元素至多达到指定大小的值。
static int getMode(int measureSpec){}
//根据测量值提取mode
static int getSize(int measureSpec){}
//根据测量值提取size
static int makeMeasureSpec(int size,int mode){}
//根据size和mode创建测量值
//函数原型
public static int makeMeasureSpec(int size, int mode)
{
return size + mode;
}
//示例:ListView.measureItem(View child)
private void measureItem(View child)
{
ViewGroup.LayoutParams p = child.getLayoutParams();
if (p == null)
{
p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
}
int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec,mListPadding.left + mListPadding.right, p.width);
int lpHeight = p.height;
int childHeightSpec;
if (lpHeight > 0)
{
childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
else
{
childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
}
child.measure(childWidthSpec, childHeightSpec);
}
//makeMeasureSpec()的深层解析
//mode的值:00,01,11,按位向左移动30位
private static final int MODE_SHIFT = 30;
public static final int UNSPECIFIED = 0
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?