2012-10-24 57 views
5

我需要檢索在活動啓動期間在佈局xml文件中定義的ScrollView的高度。這是實施此的最佳實踐。我試過把代碼放在onCreate()onStart()onResume()之內。在啓動時,所有高度均爲0。 有沒有像onFinishInflate()這樣的行爲方法?讀取應用程序啓動時的佈局大小

這裏是我的代碼:

myScroll=(ScrollView) findViewById(R.id.ScrollView01); 
int height=myScroll.getHeight(); 

回答

6

你可以做這樣的事情:

獲得最終參考你的滾動型(在onGlobalLayout訪問() 方法)。接下來,從ScrollView中獲取ViewTreeObserver,並添加一個OnGlobalLayoutListener,覆蓋onGLobalLayout並獲取此偵聽器中的測量值。

final ScrollView myScroll = (ScrollView)findViewById(R.id.my_scroll); 
ViewTreeObserver vto = myScroll.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     LayerDrawable ld = (LayerDrawable)myScroll.getBackground(); 
     height = myScroll.getHeight(); 
     width=myScroll.getHeight(); 
     ViewTreeObserver obs = myScroll.getViewTreeObserver(); 
     obs.removeOnGlobalLayoutListener(this); 
    } 

}); 

看到這個線程更多:

How to retrieve the dimensions of a view?

+0

感謝@Anup。它的工作。但是,'removeGlobalOnLayoutListener()'已棄用。任何替代品? – JiTHiN

+0

對不起,我使用了舊的方法。代碼已更新。 –

+0

再次感謝... – JiTHiN

1

您需要查詢後進行佈局視圖邊界。建議的地方是onWindowFocusChanged(boolean)。看到這個問題的更多信息:How to get the absolute coordinates of a view

此外,如果你敢於擴展你的佈局類,例如使LinearLayout等子類,你可以重寫它的onLayout()以這種方式:

@Override 
public void onLayout(boolean changed, int l, int t, int r, int b) { 
    super.onLayout(changed, l, t, r, b); 

    myScroll=(ScrollView) findViewById(R.id.ScrollView01); 
    int height=myScroll.getHeight(); 
} 
相關問題