Android(安卓)onMeasure(widthSpec, heightSpec)
16lz
2021-01-25
每个View中都有一个测量绘制控件大小的方法onMeasure(int widthMeasureSpec, int heightMeasureSpec) ,该方法用于初始化控件所占的区域:
摘自SlidingDrawer.java,仅作参考说明onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //onMeasure方法传入的两个参数widthMeasureSpec, heightMeasureSpec,其单位为dp或dip int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); //这里判断单位是dp或dip,有或者其他的单位类型 int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); //将单位转为px int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); if (widthSpecMode == MeasureSpec.UNSPECIFIED || heightSpecMode == MeasureSpec.UNSPECIFIED) { throw new RuntimeException("SlidingDrawer cannot have UNSPECIFIED dimensions"); } // final View handle = mHandle; measureChild(handle, widthMeasureSpec, heightMeasureSpec); if (mVertical) { int height = heightSpecSize - handle.getMeasuredHeight() - mTopOffset; mContent.measure(MeasureSpec.makeMeasureSpec(widthSpecSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); } else { int width = widthSpecSize - handle.getMeasuredWidth() - mTopOffset; mContent.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY)); } //最后绘制父控件的大小 setMeasuredDimension(widthSpecSize, heightSpecSize); //super.onMeasure(widthMeasureSpec, heightMeasureSpec)原型则是下面这样写的: //setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), // getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); }
更多相关文章
- android 获取webView高度,设置webView高度
- android webview js 交互
- Android(安卓)拍照,从相册获取图片TakePhoto框架,一句话完成
- Android弹出菜单的灵活运用(自定义AlertDialog)
- Android(安卓)TableLayout
- 【Android(安卓)多媒体开发】 MediaPlayer 状态机 接口 方法 解
- Android启动流程简析(三)
- Android:Android(安卓)Studio 优化
- android 画图之bitmap(一)