2

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!

seemuch
  • 233
  • 1
  • 2
  • 11

1 Answers1

1

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.

David Wasser
  • 93,459
  • 16
  • 209
  • 274