2012-06-16 63 views
0

當用戶點擊我的主視圖上的按鈕時,我膨脹一個新視圖並將其添加到我的主視圖。我的新視圖包含一個默認文本爲「HelloWorld」的TextView,同時在我的textview上設置了視圖setText(「你剛剛來自...」)和getLeft()和getRight()。問題是,它返回的座標好像文本仍然是「HelloWorld」。如何判斷何時繪製了充氣的視圖?

我認爲這可能是因爲更新的文本尚未繪製。但是,如果我在這個新視圖中單擊一個按鈕,並在onClick中執行getLeft()和getRight(),它將正常工作。我究竟做錯了什麼?

回答

1

我認爲你可以爲你的視圖創建一個類,然後重寫View.onFinishInflate並在那裏做你的東西。

應該是一個非常短的類,只有這個方法被重寫。

或者,您可以使用這裏建議的解決方案:ViewGroup finish inflate event 但缺點是每次佈局重做或更新時,不僅會在充氣後重新調用佈局。

-1

這裏有一個辦法做到這一點不延長或覆蓋東西:

private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) 
{ 
    final ViewTreeObserver vto = view.getViewTreeObserver(); 
    final OnPreDrawListener preDrawListener = new OnPreDrawListener() 
    { 
     @Override 
     public boolean onPreDraw() 
     { 
      runnable.run(); 
      final ViewTreeObserver vto = view.getViewTreeObserver(); 
      vto.removeOnPreDrawListener(this); 
      return true; 
     } 
    }; 
    vto.addOnPreDrawListener(preDrawListener); 
} 
在可運行參數

,你可以得到你所需要的更新的大小和位置,和其他一切。

或者,如果您願意,您可以使用addOnGlobalLayoutListener而不是addOnPreDrawListener