我有一个自定义视图,可将可滚动位图绘制到屏幕上。为了初始化它,我需要传入父布局对象的像素大小。但是在 onCreate 和 onResume 函数中,Layout 还没有被绘制出来,所以 layout.getMeasuredHeight() 返回 0。
作为一种解决方法,我添加了一个处理程序来等待一秒钟然后测量。这可行,但它很草率,我不知道在绘制布局之前我可以修剪多少时间。
我想知道的是,如何检测何时绘制布局?有事件或回调吗?
您可以将树观察者添加到布局中。这应该返回正确的宽度和高度。onCreate()在子视图的布局完成之前调用。所以宽度和高度还没有计算出来。要获取高度和宽度,请将其放在onCreate()方法上:
onCreate()
final LinearLayout layout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID); ViewTreeObserver vto = layout.getViewTreeObserver(); vto.addOnGlobalLayoutListener (new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { layout.getViewTreeObserver() .removeOnGlobalLayoutListener(this); } else { layout.getViewTreeObserver() .removeGlobalOnLayoutListener(this); } int width = layout.getMeasuredWidth(); int height = layout.getMeasuredHeight(); } });