#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 и переместите эту часть в заполнение макета, проблема будет решена.