使用自定义View的时候,我们往往会重载onMeasure函数, 用多了之后,发现其实都是一套写法,因此记录下这个模板.

public class MyView extends View {public MyView(Context context) {super(context);}public MyView(Context context, AttributeSet attrs) {super(context, attrs);}//计算宽private int measureWidth(int measureSpec){int result = 0;int mode = MeasureSpec.getMode(measureSpec);int size = MeasureSpec.getSize(measureSpec);if(mode == MeasureSpec.EXACTLY)  //当指定了控件大小或者使用Match_Parent{result = size; }else{//可以用下面的函数将dp转换成px//float pxValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics());result = 100; // 单位是像素,这里写上自己计算的控件大小if(mode == MeasureSpec.AT_MOST) //一般使用Wrap_Content会进入这个条件{result = Math.min(result, size);}}return result;}//计算高private int measureHeight(int measureSpec){int result = 0;int mode = MeasureSpec.getMode(measureSpec);int size = MeasureSpec.getSize(measureSpec);if(mode == MeasureSpec.EXACTLY)  //当指定了控件大小或者使用Match_Parent{result = size; }else{//可以用下面的函数将dp转换成px//float pxValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics());result = 100; // 单位是像素,这里写上自己计算的控件大小if(mode == MeasureSpec.AT_MOST) //一般使用Wrap_Content会进入这个条件{result = Math.min(result, size);}}return result;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));}}


更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. 02相对布局
  6. Android的设置界面及Preference使用
  7. Android(安卓)技术栈总结
  8. Android使用自定义AlertDialog
  9. Android控件开发之四----ListView(2)

随机推荐

  1. 【Android】论ViewHolder存在的意义
  2. android常用控件一二
  3. android 焦点控制及运用
  4. Android(安卓)文件夹介绍
  5. Android网络架构之———OkHttp+Volley+G
  6. android避免内存泄露
  7. Android(安卓)应用的欢迎界面实现代码
  8. 面试常问的问题解决
  9. Gradle依赖的统一管理
  10. Android系统的启动流程(转载)