这几天要做个界面,需要用到自定义VIewGroup,从来没有自定义过View,真是遇到了一大堆问题,在此记录,欢迎指正批评交流。
首先,查看了许多资料说是要重写onMeasure(),onLayout(); 云云的,还看到许多代码,其实差不多都挺全了,看了下源码,其实大部分都有,但是还是想写一下自己的经验吧。
在onMeasure(),用来测量各种控件的大小的。在onMeasure之后,view才有大小,才能获得getMeasureHeight()以及getMeasureWidth();这两个表示测量出来的宽高,跟getWidth()有差别,但是具体什么时候不一样我还不清楚。
当不需要自己测量viewGroup的width和height,只需要调用super.onMeasuer(widthMeasureSpec, heightMeasureSpec)即可。如果有特殊需求,可以自己调用measureChild方法一个一个去测量。(代码过几天贴)
如果自己想要测量的话:一定不能忘记
setMeasuredDimension(measuredHeight, measuredWidth);这个用于储存计算出来的宽高,不写会报错的。
当需要测量viewGroup的子控件的时候,没有特殊要求只需要调用:measureChildren就好,这个方法自己会遍历该viewGroup的所有子view,一一测量。
要测量wrap_content 的时候可以这样:MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
更多内容慢慢写来,困了 休息了,明天继续 欢迎批评指正。