override onMeasure()
来源:互联网 发布:pr软件图标 编辑:程序博客网 时间:2024/06/03 23:17
// widthMeasureSpec是一个int值,前两位代表模式,后面30位代表数值,有三种mode:// EXACTLY: 当layout_width = 100dp 或 layout_width = match_parent时// AT_MOST:当layout_width = wrap_content时// UNSPECIFIED:一般自定义的时候才会用,要多大有多大// 如果不override的话,默认是按EXACTLY模式来处理的, 看如下代码:// public static int getDefaultSize(int size, int measureSpec) {// int result = size;// int specMode = MeasureSpec.getMode(measureSpec);// int specSize = MeasureSpec.getSize(measureSpec);// switch (specMode) {// case MeasureSpec.UNSPECIFIED:// result = size;// break;// case MeasureSpec.AT_MOST:// case MeasureSpec.EXACTLY:// result = specSize;// break;// }// return result;// }// an example@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 一定要用setMeasureDimension setMeasureDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));}// 这里才是处理mode的关键,默认的getDefaultSize()统统处理成EXACTLY模式private int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if(specMode == MeasureSpec.EXACTLY) { // set width 20 px wider result = MeasureSpec.makeMeasureSpec(specSize + 20, MeasureSpec.EXACTLY); } else { result = 200;//要控制不要超过parent的大小 if(specMode == MeasureSpec.AT_MOST) {] int size = Math.min(result, specSize); result = MeasureSpec.makeMeasureSpec(size, MeasureSpec.AT_MOST); } } return result;}
0 0
- override onMeasure()
- onmeasure
- onMeasure
- onMeasure
- onMeasure
- OnMeasure()
- onMeasure
- onMeasure
- override
- Override
- override
- OverRide
- override
- @override
- @Override
- @Override
- @Override
- override
- hdu5732(树哈希+树的重构+树的重心)
- LeetCode算法题——ZigZag Conversion
- [LeetCode OJ]Merge k Sorted Lists
- lcd1602
- 有点烦躁
- override onMeasure()
- 基于Java EE新闻管理系统的设计与实现
- root用户和sudo使用root权限的区别
- POJ
- java中的正则表达式总结
- DB2 自动存储表空间(Automatic Storage)增加和删除存储路径
- angular 2.0 关于新版angular-cli的应用
- 用vs2015编译器写c语言程序提示“预编译头文件来自编译器的早期版本,或者预编译头为c++而在c中使用它(或相反)”
- 蓝桥杯入门训练:圆的面积