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);
}
相关文章推荐
- 【Rebol 学习笔记】第一篇:编写一个简单的 CGI 程序
- 第一篇 : 开始写一些学习笔记
- ActionBarSherlock学习笔记 第一篇——部署
- Dom4j学习笔记--第一篇
- Windows游戏加速外挂-变速齿轮 学习笔记-【第一篇】
- C#中的文件流学习笔记第一篇
- 第一篇 - 敏捷学习笔记
- Hibernate学习笔记--第一篇 初学入门第一个例子
- 【OpenCV学习笔记】第一篇 搭建环境
- lalala~ 我的第一篇linux学习笔记_如何查看系统模块
- [小e笔记]之一步一步学习备份恢复——第一篇 备份恢复基础相关
- linux 学习心得笔记<初级>第一篇
- Hibernate 学习笔记第一篇
- Cocoa2d-X学习笔记第一篇:下个决心表个态
- 啊 第一篇学习笔记,什么都不写,只为赚分数
- 学习笔记第一篇之Delphi的默认窗体代码
- C++学习笔记第一篇(转)
- [Linux] 学习笔记第一篇——安装
- 第一篇博客:HTML学习笔记
- 第一篇学习笔记:《学习计划》