android - 调用 setContentView() 后设置窗口布局

标签 android android-activity android-windowmanager android-rendering

我正在创建一个对话框格式的 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到消息队列中而不是直接调用呢? 谢谢!

最佳答案

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

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

关于android - 调用 setContentView() 后设置窗口布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066701/

相关文章:

java - 从 html 解析器获取元素

android - 以编程方式在android中打开屏幕

android - 在锁定屏幕上显示 UI(Activity/WindowManager)并支持 Oreo

Android:方向更改后视频重新启动

java - ARToolKit:在移动设备上处理自然特征跟踪图像 (jpeg)

android - 使用 wrap_content 高度在 FrameLayout 中裁剪 ImageView

java - 使用多个 Intent 时如何避免跳过 Activity ?

android - 如何在屏幕底部添加工具栏?

android - Android应用程序崩溃了吗?

android - WindowManager$BadTokenException 无法添加窗口