2012-02-05 55 views
4

在片段視圖中,我想根據包含視圖的寬度調整其中一個子視圖的佈局參數,其佈局參數設置爲match_parent。我需要做的是調用getWidth/getHeight爲父,然後設置子視圖的ViewGroup.LayoutParameters等運行時調整佈局參數

問題是getWidth將只返回一個有效的值後,第一次繪製佈局我不確定是否有任何片段覆蓋可以用來做這件事。例如,當onCreateView或onStart被調用時,視圖的實際寬度不確定。所以有直接的方法來實現這個,或者我將不得不繼承一個視圖並覆蓋onLayout或onMeasure?

回答

8

您可以在視圖樹上設置一個全局佈局偵聽器,並在其中進行處理。

final ViewTreeObserver vto = myView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    public void onGlobalLayout() { 
     // do layout tweaking based on measurements 

     // remove the listener... or we'll be doing this a lot. 
     vto.removeGlobalOnLayoutListener(this); 
    } 
} 
+0

哇!我顯然錯過了這個,看起來正是我需要的。謝謝! – gordonwd 2012-02-05 16:19:27

+0

太好了,祝你好運。 – 2012-02-05 16:52:18

+1

不要忘記使用vto.removeGlobalOnLayoutListener(this)刪除全局佈局偵聽器; – Anukool 2013-09-05 06:34:51