1

我讀過的所有東西都說你不能在構造函數中調用getWidth()getHeight(),但我在onResume()中調用它們。屏幕的佈局不應該畫出來嗎?爲什麼在onResume()的View中調用getWidth()返回0?

@Override 
protected void onResume() { 
    super.onResume(); 

    populateData(); 
} 

private void populateData() { 
    LinearLayout test = (LinearLayout) findViewById(R.id.myview); 
    double widthpx = test.getWidth(); 
} 

回答

2

視圖仍然沒有被抽時onResume()被調用,所以使用OnGlobalLayoutListener()其寬度和高度都爲0。你可以「捕獲」時,其大小變化:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 

     // Removing layout listener to avoid multiple calls 
     if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
      yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     } 
     else { 
      yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 

     populateData(); 
    } 
}); 

有關更多信息看看Android get width returns 0

+2

謝謝,我愛我一個剪切粘貼的答案。 –

1

,你必須等待,以前getWidthgetHeigth一些回報的當前視圖的層次至少測量!= 0,你可以做的是檢索「根」的佈局和發佈可運行。在runnable裏面,你應該能夠成功地檢索寬度和高度

root.post(new Runnable() { 
    public void run() { 
     LinearLayout test = (LinearLayout) findViewById(R.id.myview); 
     double widthpx = test.getWidth(); 
    } 
}); 
相關問題