我正在尝试在活动加载后,我的应用程序格式化屏幕中的一些图像。问题是在onCreate()
,onResume()
方法内,ImageView
方法的宽度和高度= 0。调整视图大小后如何运行一些代码?
我测试onPostResume()
但它不起作用=(
答案 0 :(得分:3)
Android中的视图没有像Blackberry或iPhone那样的固定大小/位置;相反,它们是动态布局的。布局发生的时间晚于onCreate/onResume
,理论上可以多次发生。每个视图都有方法onMeasure
和onLayout
,这些方法对此负责。只有在onLayout
方法返回后,您才能告诉视图的大小和位置。在此之前,视图的大小为0,位置为0(正如您所注意到的)。
因此尝试在onCreate/onResume
中获取ImageView的大小毫无意义,因为此时尚未调用onLayout
。
相反,像这样覆盖onLayout
并在那里做你的事情:
public class MyImageView extends ImageView {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
// at this point size and position are known
int h = getHeight();
int w = getWidth();
doSomethingCool(h,w);
}
}