写一个自定义控件,只写了onDraw方法,在XML文件中使用,设置宽高为wrap_content,发现在canvas上画的内容很少,但canvas占的空间是整个屏幕,其它控件被覆盖了,
因为对自定义控件使用的也不是很熟练,所以猜测是因为没有重写onMeasure方法,后面在网上找了下资料,试着去重写了onMeasure方法,将问题解决,在此做个记录,以便 以后查看。
下面以测量控件的宽度为例
1、使用MeasureSpec 的getMode()方法,获取父控件测量宽度的模式;使用MeasureSpec 的getSize()方法,获取父控件测量宽度的值。
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
2、根据模式来确定宽度的具体大小
模式有三种:
MeasureSpec.EXACTLY:这个模式代表的是控件设置的宽度是具体值或者是match_parent,则具体的宽度就等于父控件测量的宽度。
MeasureSpec.AT_MOST:这个模式代表的是控件的宽度不能超过屏幕的宽度,具体宽度的值是,控件自身需要多宽就显示多宽,最宽就为屏幕的宽度。