调用 setContentView() 后设置 window 布局

Setting window layout after calling setContentView()

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

window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT);

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

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

同样,这是在调用 setContentView() 之后。 为什么一定要pose到消息队列中而不是直接调用呢? 谢谢!

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

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