2013-10-25 68 views
0

我有一種情況:在自定義視圖中重寫`setMeasuredDimension()`或`getMeasuredWidth()`是否是一個好習慣?

ViewA extends ViewB,既覆蓋onMeasure()和呼叫setMeasuredDimension()。 ViewA將其寬度設置爲10dp,而ViewB將其寬度設置爲20dp。現在,如果我在onMeasure()的末尾從ViewB調用super.getMeasuredWidth()來獲取ViewA的寬度,我會得到20dp。當ViewA完成自我測量時,原因很明顯,ViewB調用setMeasuredDimension(),然後覆蓋舊的值。

現在顯而易見的解決方案是重寫相關方法。我的問題是,在自定義View中覆蓋setMeasuredDimension()getMeasuredWidth(),getMeasuredHeight()是否是一種很好的做法。

回答

1

傻,我的解決方案很簡單。在ViewB的onMeasure(),我收集了ViewA的寬度和高度,立即然後叫setMeasuredDimension()

super.onMeasure(wSpec, hSpec); 
final int superWidth = super.getMeasuredWidth(); 
final int superHeight = super.getMeasuredHeight(); 
setMeasuredDimension(w, h); 

// use superWidth and superHeight here 

,就是這樣。

相關問題