在onCreate里面,views仍然无法知道附近views和children等的状态……所以只有在所有的准备和布局过程完成之后,你才能得到views的大小。
这是在绘制视图之前获取视图大小的快速代码:
private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable)
{
final ViewTreeObserver vto = view.getViewTreeObserver();
final OnPreDrawListener preDrawListener = new OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
Log.d(App.APPLICATION_TAG, CLASS_TAG + "onpredraw");
runnable.run();
final ViewTreeObserver vto = view.getViewTreeObserver();
vto.removeOnPreDrawListener(this);
return true;
}
};
vto.addOnPreDrawListener(preDrawListener);
}
或者,如果您愿意,您可以使用addOnGlobalLayoutListener
而不是。addOnPreDrawListener
用法示例:
runJustBeforeBeingDrawn(view,new Runnable()
{
@Override
public void run()
{
int width=view.getWidth();
int height=view.getHeight();
}
});
另一种方法是使用 onWindowFocusChanged(并检查 hasFocus==true),但这并不总是最好的方法(仅用于简单的视图创建,而不用于动态创建)
编辑:替代 runJustBeforeBeingDrawn:https ://stackoverflow.com/a/28136027/878126