2012-04-25 47 views
0

我通過重寫一個ViewGroup,像這樣寫一個複合視圖:Android的複合視圖初始化

public class CompositeView extends RelativeLayout 

我需要執行一些一次性初始化測量已設置後(即onMeasure被稱爲),因爲我需要知道身高。

我想的是壓倒一切的onAttachedToWindow,但該文檔提到:

可以稱爲第一的onDraw之前的任何時間 - 包括之前或之後onMeasure(INT,INT)。

我還有其他選擇嗎?

感謝

回答

1

我喜歡在我的CustomViews使用onSizeChanged:

@Override 
protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { 
    boolean changed = false; 
    changed |= w != oldw; 
    changed |= h != oldh; 
    changed &= w > 0; 
    changed &= h > 0; 
    if (changed) { 
      //do initialization stuff here 
      ... 

此方法布點完成後調用一次。這questions給出了一些額外的細節。

+0

這是保證被稱爲一次? – Steve 2012-04-25 13:44:49

+0

只要確定了視圖的大小,就立即調用它。我編輯了我的anser以反映 – Renard 2012-04-25 13:52:29

+0

謝謝。我從不知道按位運算符可能適用於布爾值。學到了新的東西。 – Steve 2012-04-25 13:54:46