初始化期间何时从 onSizeChanged() 获取视图大小
When to get view size from onSizeChanged() during initialization
我试图在应用程序初始化期间使用 onSizeChanged() 视图获取我的视图的宽度和高度,但它总是 return 0。我在这里阅读了很多问题,但是 none 它的工作,我总是只得到 0.
在我的应用程序中,我有一个 canvas,我需要将其大小传递给另一个对象,该对象使用它进行计算。在 canvas 中,我有变量 width
a height
来存储大小,并且在 MyActivity 中的初始化期间,它们被传递给该计算。问题是,它总是 returns 0,即使我尝试使用 getWidth() 和 getHeight()。
我也试过在 onResume() 中检索大小,但我的 canvas 的 onSizeChanged() 似乎还没有被调用。
主要片段Activity
@Override
protected void onResume() {
super.onResume();
hB = canvas.getW();
vB = canvas.getH();
ap = new ActualPosition();
generator = new PositionGenerator(ap);
table = new DrawTable(ap, hB, vB);
generator.runMe();
}
代码来自 canvas
@Override
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
super.onSizeChanged(w, h, oldW, oldH);
this.w = w;
this.h = h;
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
}
public int getW() {
return w;
}
public int getH() {
return h;
}
所以我想知道在 Activity 生命周期中什么时候调用 onSizeChanged() 方法。
您可以使用在显示视图之前调用的 getViewTreeObserver()
方法。
yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// prevent multiple calls by removing the listener
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
grid.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
grid.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
int mWidth = yourView.getWidth();
int mHeight = yourView.getHeight();
}
}
});
我试图在应用程序初始化期间使用 onSizeChanged() 视图获取我的视图的宽度和高度,但它总是 return 0。我在这里阅读了很多问题,但是 none 它的工作,我总是只得到 0.
在我的应用程序中,我有一个 canvas,我需要将其大小传递给另一个对象,该对象使用它进行计算。在 canvas 中,我有变量 width
a height
来存储大小,并且在 MyActivity 中的初始化期间,它们被传递给该计算。问题是,它总是 returns 0,即使我尝试使用 getWidth() 和 getHeight()。
我也试过在 onResume() 中检索大小,但我的 canvas 的 onSizeChanged() 似乎还没有被调用。
主要片段Activity
@Override
protected void onResume() {
super.onResume();
hB = canvas.getW();
vB = canvas.getH();
ap = new ActualPosition();
generator = new PositionGenerator(ap);
table = new DrawTable(ap, hB, vB);
generator.runMe();
}
代码来自 canvas
@Override
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
super.onSizeChanged(w, h, oldW, oldH);
this.w = w;
this.h = h;
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
}
public int getW() {
return w;
}
public int getH() {
return h;
}
所以我想知道在 Activity 生命周期中什么时候调用 onSizeChanged() 方法。
您可以使用在显示视图之前调用的 getViewTreeObserver()
方法。
yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// prevent multiple calls by removing the listener
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
grid.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
grid.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
int mWidth = yourView.getWidth();
int mHeight = yourView.getHeight();
}
}
});