如果我有一个将其主题设置为Theme.Holo.Light.Dialog
的活动,则它会扩展得很好。它几乎完全以纵向模式填充在手机屏幕上,但在横向模式下,它不会长时间不合理地伸展。例如,在Google的这张图片中,您可以看到对话框没有填满整个屏幕。
它不会崩溃以匹配标题的宽度,如果你有一个扩展Dialog类的类有你自己的Dialog构建会发生什么。
这是我的布局会发生的事情。
我需要将哪些属性应用于LinearLayout以使其扩展得相当漂亮?
答案 0 :(得分:26)
您可以使用Theme.Holo.Light.Dialog.MinWidth
正确调整布局大小。
来自文档:
public static final int Theme_Holo_Light_Dialog_MinWidth
具有最佳宽度的Theme.Holo.Light.Dialog的变体 定期对话。
使用它的方法是将ContextThemeWrapper代替Context(使用它)传递给自定义Dialog的构造函数:
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:扪/ dialog_min_width_major:
<!-- The platform's desired minimum size for a dialog's 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:扪/ dialog_min_width_minor:
<!-- The platform's desired minimum size for a dialog's 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%,但它比以前好:):
答案 1 :(得分:3)
只需在自定义主题中添加两个值即可。
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
E.g。
<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>
答案 2 :(得分:0)
在我的自定义对话框中,我使用以下属性并设置对话框宽度以匹配父级及其宽度比例。
<item name="android:windowBackground">@null</item>
<item name="android:windowIsFloating">false</item>
答案 3 :(得分:0)
两种情景
一个。如果您需要它来填充屏幕,请将您的父母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
。
答案 4 :(得分:0)
您可以尝试在运行时更改Dialog维度,如下所示:
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);
如果您使用碎片。