我读过的所有内容都表示您无法在构造函数中的getWidth()
上调用getHeight()
或View
,但我在onResume()
中调用它们。屏幕的布局是不是已经被绘制了?
@Override
protected void onResume() {
super.onResume();
populateData();
}
private void populateData() {
LinearLayout test = (LinearLayout) findViewById(R.id.myview);
double widthpx = test.getWidth();
}
答案 0 :(得分:4)
你必须等到当前视图的层次结构至少在getWidth
和getHeigth
返回之前测量!= 0.你可以做的是检索“根”布局并发布一个可运行。在runnable中你应该能够成功检索宽度和高度
root.post(new Runnable() {
public void run() {
LinearLayout test = (LinearLayout) findViewById(R.id.myview);
double widthpx = test.getWidth();
}
});
答案 1 :(得分:3)
调用onResume()
时仍未绘制视图,因此其宽度和高度为0.您可以"捕获"当其大小使用OnGlobalLayoutListener()
更改时:
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。