您的位置:首页 > 移动开发 > Android开发

android群英传 学习笔记--第一篇

2017-02-16 13:43 501 查看

3.2View的测量

三种模式:

1.EXACTLY:设置了layout_weight和layout_height的具体值(layout_weight="100dp"或者layout_weight=match_parent)

2.AT_MOST:设置layout_weight和layout_height为warp_conten

3.UNSPECIFIED:想多大多大,绘制自定义view。

模式1,view类中onMeasure默认。自定义view,需要绘制2-3的模式,则需要重写onMeasure函数。

来找个原声widget看看它是如何重写的。ActionBarView.java这个比较标准,来看一下:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final LayoutParams upLp = (LayoutParams) mUpView.getLayoutParams();
... ...
int width = mUpView.getVisibility() == GONE ? 0 : mStartOffset;
int height = upLp.topMargin + mUpView.getMeasuredHeight() + upLp.bottomMargin;
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
final int heightSize = MeasureSpec.getSize(heightMeasureSpec);

switch (widthMode) {
case MeasureSpec.AT_MOST:
width = Math.min(width, widthSize);
break;
case MeasureSpec.EXACTLY:
width = widthSize;
break;
case MeasureSpec.UNSPECIFIED:
default:
break;
}
switch (heightMode) {
case MeasureSpec.AT_MOST:
height = Math.min(height, heightSize);
break;
case MeasureSpec.EXACTLY:
height = heightSize;
break;
case MeasureSpec.UNSPECIFIED:
default:
break;
}
setMeasuredDimension(width, height);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: