2

我正在创建一个作为对话框格式的活动:它不覆盖整个屏幕,而只是其中的一部分。我所做的是在这个活动的 onCreate() 方法中,在调用 setContentView() 之后,我调用:

window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT);

它不起作用。我需要执行以下操作才能使其正常工作:

window.getDecorView().post(new Runnable() { 
    @Override 
    public void run() { 
        window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT); 
    } 
});

同样,这是在调用 setContentView() 之后。为什么我必须将它放入消息队列而不是直接调用它?谢谢!

4

1 回答 1

1

设置内容视图只是将布局提供给 Android 框架。布局尚未完全配置。这在 Android 框架重新获得控制权之前不会发生(即:在下一个事件循环中)。onCreate()这在方法结束之前不会发生。

通过将代码发布到 a Handler,您可以延迟该代码的执行,直到 Android 框架完全配置了布局之后。

于 2016-12-09T19:30:54.950 回答