Размер пользовательского диалога для соответствия Theme.Holo.Light.Dialog
Если у меня есть Activity, для которого задана тема Theme.Holo.Light.Dialog
, она будет масштабироваться. Он полностью заполняет экран на телефонах в портретном режиме, но в ландшафтном режиме он не будет растягиваться неоправданно долго. Например, на этом снимке из Google вы можете видеть, что диалог не заполняет весь экран.
![enter image description here]()
Он не будет либо крах, чтобы соответствовать ширине заголовка, как то, что произойдет, если у вас есть собственный сборник Dialog с помощью класса, который расширяет класс Dialog.
Вот что будет с моим макетом.
![enter image description here]()
Какие свойства мне нужно применить к LinearLayout, чтобы сделать его масштабным?
Ответы
Ответ 1
Вы можете использовать Theme.Holo.Light.Dialog.MinWidth
для правильной настройки макета.
Из документации:
public static final int Тема_Holo_Light_Dialog_MinWidth
Вариант Theme.Holo.Light.Dialog, который имеет хорошую минимальную ширину для регулярный диалог.
Способ использования этого заключается в передаче ContextThemeWrapper вместо контекста (с использованием этого) в ваш пользовательский конструктор диалога:
YourCustomDialog cDialog = new YourCustomDialog(
new ContextThemeWrapper(this,
android.R.style.Theme_Holo_Light_Dialog_MinWidth));
Вот как определяется Theme.Holo.Light.Dialog.MinWidth
:
<style name="Theme.Holo.Light.Dialog.MinWidth">
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>
От dimens.xml
:
@android: DIMEN/dialog_min_width_major:
<!-- The platform desired minimum size for a dialog width when it
is along the major axis (that is the screen is landscape). This may
be either a fraction or a dimension. -->
<item type="dimen" name="dialog_min_width_major">65%</item>
@android: DIMEN/dialog_min_width_minor:
<!-- The platform desired minimum size for a dialog width when it
is along the minor axis (that is the screen is portrait). This may
be either a fraction or a dimension. -->
<item type="dimen" name="dialog_min_width_minor">95%</item>
Как кажется, ширина диалога на картинке, которую вы опубликовали, составляет около 65%. В портретном режиме это будет 95%.
Честно говоря, ширина не выглядит как 95% в портретном режиме, но она лучше, чем раньше:):
![enter image description here]()
Ответ 2
Просто добавьте два значения в настраиваемую тему.
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
например.
<style name="MyDialog" parent="ThDialogBase">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>
Ответ 3
В моем настраиваемом диалоговом окне я использую следующие свойства и устанавливаю ширину диалогового окна для соответствия родительской и масштабной шкале.
<item name="android:windowBackground">@null</item>
<item name="android:windowIsFloating">false</item>
Ответ 4
Два сценария
а. Если вам нужно, чтобы заполнить экран, полностью установите родителей minWidth
и minHeight
на 1000dp
LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="1000dp"
android:minHeight="1000dp"
б. Если вам нужно его масштабировать, не заполняя весь экран. Установите один из дочерних элементов вашего LinearLayout
в пределах RelativeLayout
и установите relative layouts width to match_parent
.
Ответ 5
Можете ли вы попробовать изменить размер диалогового окна во время выполнения, например:
DisplayMetrics metrics = getResources().getDisplayMetrics();
int width = metrics.widthPixels;
yourDialog.show();
yourDialog.getWindow().setLayout((6 * width)/7, LayoutParams.WRAP_CONTENT);
или
Dialog yourDialog = dialogFragment.getDialog();
yourDialog.getWindow().setLayout((6 * width)/7, (4 * height)/5);
если вы используете фрагменты.