关于onMeasure(),onlayout()方法的简单介绍
2014-06-13 16:35
561 查看
在继承ViewGroup类时,子类需要重写两个方法,分别是onMeasure,onLayout两个方法。
1、在onMeasure(int, int)中,必须调用setMeasuredDimension(int width, int height)来存储测量得到的宽度和高度值,如果没有这么去做会触发异常
IllegalStateException。
2、onLayout()的调用时机:在view给其孩子设置尺寸和位置时被调用。
3、执行的顺序:onMeasure(int, int)--->onLayout()
1、在onMeasure(int, int)中,必须调用setMeasuredDimension(int width, int height)来存储测量得到的宽度和高度值,如果没有这么去做会触发异常
IllegalStateException。
2、onLayout()的调用时机:在view给其孩子设置尺寸和位置时被调用。
3、执行的顺序:onMeasure(int, int)--->onLayout()
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width=mesureWidth(widthMeasureSpec); int height=mesureHeight(heightMeasureSpec); //计算viewgroup子控件的大小 measureChildren(width, height); //设置自定义viewgroup的大小 setMeasuredDimension(width, height); } private int mesureWidth(int width){ int result=0; //模式 int mode=MeasureSpec.getMode(width); int widthsize=MeasureSpec.getSize(width); switch (mode) { case MeasureSpec.AT_MOST: case MeasureSpec.EXACTLY: result=widthsize; break; default: break; } return result; } private int mesureHeight(int height){ int result=0; //模式 int mode=MeasureSpec.getMode(height); int heightsize=MeasureSpec.getSize(height); switch (mode) { case MeasureSpec.AT_MOST: case MeasureSpec.EXACTLY: result=heightsize; break; default: break; } return result; }
/** * 调用场景:在view给其孩子设置尺寸和位置时被调用*/ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); int appWidth=this.getWidth(); int appHeight=this.getHeight(); /*int chilcount=getChildCount(); View childview=getChildAt(0); int h=childview.getMeasuredHeight();*/ Log.i("------->", appWidth+""); Log.i("------->", appHeight+""); }
相关文章推荐
- 关于ios的autoLayout的一些简单介绍以及使用方法
- 关于ios的autoLayout的一些简单介绍以及使用方法
- 关于ios的autoLayout的一些简单介绍以及使用方法
- JQuery中的bind、delegate、on、live方法的区别及简单介绍
- Android的View绘制过程,onMeasure()方法介绍
- android自定义粘性控件,综合使用measure,layout,onTouchEvent,onInterceptTouchEvent等方法
- iOS-UICollectionViewLayout方法简单介绍
- 关于RequireJS的简单介绍即使用方法
- JQuery中的bind、delegate、on、live方法的区别及简单介绍
- onMeasure、onLayout以及onSizeChanged方法的回调时机和回调顺序
- iOS 设计中关于UIScrollViewDelegate的几个代理方法的简单介绍
- 关于java RMI框架(远程方法调用)的简单介绍
- 关于某社交app的安全分析 简单介绍下app防止反编译的方法
- Android onMeasure方法介绍
- Android实现卫星菜单(一)自定义属性及重写onMeasure、onLayout方法
- Android onMeasure方法介绍
- Android onMeasure,onFocusChanged方法介绍
- 关于AppDelegate及内部方法的简单介绍
- 关于View的onMeasure()、onSizeChanged()、onLayout()、onDraw()调用顺序
- 自定义View(3)——onLayout()、onDraw()方法的简单使用