Настройка макета окна после вызова setContentView()

Я создаю мероприятие в формате диалога: оно охватывает не весь экран, а только его часть. То, что я сделал, было в методе onCreate() этого действия, после вызова setContentView() я вызываю:

window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT);

И это не работает. Вместо этого мне нужно сделать следующее:

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

Опять же, это ПОСЛЕ вызова setContentView(). Почему я должен поместить его в очередь сообщений, а не вызывать его напрямую? Спасибо!

1 ответ

Решение

Настройка представления контента просто дает макет для платформы Android. Макет еще не полностью настроен. Этого не произойдет, пока платформа Android не получит контроль (т.е. в следующем цикле событий). Этого не произойдет, пока onCreate() метод заканчивается.

Разместив свой код на Handlerвы откладываете выполнение этого кода до тех пор, пока платформа Android полностью не настроит макет.

Другие вопросы по тегам