I am creating an activity that as a dialog format: it does not cover the whole screen, but only part of it. What I did was in the onCreate() method of this activity, after calling setContentView(), I call:
window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT);
And it does not work. I need to do the following instead to make it work:
window.getDecorView().post(new Runnable() {
@Override
public void run() {
window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT);
}
});
Again, this is AFTER setContentView() is called. Why do I have to pose it into the message queue instead of calling it directly? Thanks!
Setting the content view just gives the layout to the Android framework. The layout hasn't yet been fully configured. This doesn't happen until the Android framework gets control back (ie: in the next event loop). This won't happen until the onCreate()
method ends.
By posting your code to a Handler
, you delay the execution of that code until after the Android framework has fully configured the layout.