首先在了解我為什麼這麼寫之前,請閱讀一篇前人的文章: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裡面設定的高度給限制住了。那麼我改用這種模式,就解除了原來預設限制大小的模式。