小编典典

如何判断布局何时绘制?

all

我有一个自定义视图,可将可滚动位图绘制到屏幕上。为了初始化它,我需要传入父布局对象的像素大小。但是在 onCreate 和 onResume
函数中,Layout 还没有被绘制出来,所以 layout.getMeasuredHeight() 返回 0。

作为一种解决方法,我添加了一个处理程序来等待一秒钟然后测量。这可行,但它很草率,我不知道在绘制布局之前我可以修剪多少时间。

我想知道的是,如何检测何时绘制布局?有事件或回调吗?


阅读 60

收藏
2022-06-15

共1个答案

小编典典

您可以将树观察者添加到布局中。这应该返回正确的宽度和高度。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();

        } 
    });
2022-06-15