Тема.Dialog создает слишком маленький экран

#android #themes

#Android #темы

Вопрос:

У меня есть действие с ListView, которое имеет:

 android:theme="@android:style/Theme.Dialog"
  

в манифесте.
Когда я открываю его и когда в ListView есть только одна строка, открывающееся окно очень маленькое.
Как мне сделать так, чтобы окно занимало весь экран?

Ответ №1:

Используйте это в вашем методе onCreate действия, чтобы сделать его полноэкранным.

    @Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    setContentView(R.layout.myxml);

    LayoutParams params = getWindow().getAttributes(); 
            params.height = LayoutParams.MATCH_PARENT;
            params.width  = LayoutParams.MATCH_PARENT;
           getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
   } 
  

Комментарии:

1. Решение не работает. Может быть, это из-за темы диалога с ListView? Есть идеи?

2. Спасибо! Моя активность (сделанная похожей на диалоговое окно через манифест) имела довольно сложное линейное описание и отображала его шириной всего в несколько букв. Но, вау, у меня это сработало! Но почему?

3. Пожалуйста, проверьте комментарии ниже на наличие изменений. Ответу более двух лет и может потребовать некоторых изменений.

Ответ №2:

Я обнаружил, что настройка размера окна действительно работает, но вам придется сделать это немного позже. В этом примере ширина окна установлена равной 90% от ширины дисплея, и это сделано в onStart() , а не onCreate() :

 @Override
protected void onStart() {
   super.onStart();
   // In order to not be too narrow, set the window size based on the screen resolution:
   final int screen_width = getResources().getDisplayMetrics().widthPixels;
   final int new_window_width = screen_width * 90 / 100; 
   LayoutParams layout = getWindow().getAttributes();
   layout.width = Math.max(layout.width, new_window_width); 
   getWindow().setAttributes(layout);
}
  

Ответ №3:

Аналогично ответу от PravinCG, но это можно сделать с помощью одной строки в onCreate()…

 getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
  

Комментарии:

1. Решение не работает. Может быть, это из-за темы диалога с ListView? Есть идеи?

Ответ №4:

Используйте предложенный код перед вызовом setcontentview(). Это сработает.

Ответ №5:

Просто небольшое обновление. Используется MATCH_PARENT вместо устаревшего FILL_PARENT. Ответ PravinCG отлично сработал для меня.

Ответ №6:

Дааа! Я понял это! Проблема в том, что размеры полей не рассчитываются в ширине окна. Итак, если вы установите для поля макета значение 0 и переместите эту часть в заполнение макета, проблема будет решена.