我正在获取视图的高度和宽度,在getView()方法中膨胀。这是一个网格项目。
通常我在视图上使用post()来获取大小,在它附加到布局之后。但它返回0.
final View convertViewFinal = convertView;
convertView.post(new Runnable() {
@Override
public void run() {
doSomethingWithConvertView(convertViewFinal);
}
});
...
doSomethingWithConvertView(View v) {v.getWidth(); /*returns 0*/};
如何获得尺寸?
答案 0 :(得分:1)
虽然使用viewTreeObserver肯定有效,但我发现使用活动视图中的runnable可以可靠地调用对膨胀视图调用测量要求。即。
someActivityInstance.getWindow().getDecorView().post(new Runnable() {
@override
public void run() {
// someMeasurements
}
});
答案 1 :(得分:0)
事情是转换视图很可能还没有在手机屏幕上绘制,所以你必须等到它准备就绪。
您需要使用ViewTreeObserver,以确切了解视图的绘制时间。
查看此答案以获取更多信息: When Can I First Measure a View?
答案 2 :(得分:0)
您可能正在onCreate或onStart或onResume上调用此方法,这些方法在布局测量之前运行。 但是有很多工作,这是一个很好的选择:
ViewTreeObserver vto = rootView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
v.getWidth();//already measured...
}
});
其中rootView可以是比您想要宽度更高级别的任何viewGroup。 但请注意,此列表器可能会运行多次。