自定义一个MyView继承于ViewGroup,在布局文件中引用,通过view的onMeasure()方法,可获得一些view的相关属性,如View的宽(高)度模式,宽高(单位为像素,在布局文件中给出来的),如下:
int withMode = MeasureSpec.getMode(widthMeasureSpec);
int withSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
以上借助了MeasureSpec类,宽高模式mode的返回值(getMode获得)有三种:
- EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
- AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
- UNSPECIFIED:表示子布局想要多大就多大,很少使用,比如在管理端项目中就使用到了(当自定义的view是listview等类似的view时可能用此参数)
最后通过setMeasuredDimension(int width,int height)设置view的最终绘制宽高