首先在理解我为什么这么写之前,请阅读一篇前人的文章:http://blog..net/a396901990/article/details/36475213
这篇文章详细的分析了一下onMeasure函数的源码和用法。通过阅读这篇文章我才得到了启示。再次感谢一下这个博主。
进入正题~
随着开发的深入越来越多的控件需要自己去写去画,也就是我们常说的自定义控件。但是相信很多人都碰到过自定义控件在布局上或者是显示大小上经常碰到一些奇奇怪怪的问题。这篇文章所描述和解决的问题只是其中之一。
问题:自定义的控件,如果在layout里面写好了固定宽高的话,我在代码里想要通过setMinimumHeight或者setMinimumWidth方法进行修改时无效,没有任何变化。
解决办法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.getSize(heightMeasureSpec);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height,MeasureSpec.UNSPECIFIED);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}重载自定义view的onMeasure方法。比如我这个控件我只需要可以动态在代码里设置高度,那么我只要对他的高度做处理就行了。当他的高度被设置上MeasureSpec.UNSPECIFIED时,就意味着他的大小将不受任何约束,也就是意味着你在代码里动态修改他变成了可能,原先我猜测应该是被layout里面设置的高度给限制住了。那么我改用这种模式,就解除了原来默认限制大小的模式。