自定义对话框大小以匹配Theme.Holo.Light.Dialog

如果我有一个活动,它的主题设置为Theme.Holo.Light.Dialog ,它将会很好地扩展。 它将以几乎完全的肖像模式在手机上填充屏幕,但是在横向模式下不会不合理地拉长。 例如,在Google的这张照片中,您可以看到对话框没有填满整个屏幕。

在这里输入图像说明

它不会崩溃以匹配标题的宽度,例如,如果通过扩展Dialog类的类来创build自己的Dialog版本,将会发生什么情况。

这是我的布局会发生什么。

在这里输入图像说明

我需要将什么属性应用于LinearLayout以使其相当好?

Solutions Collecting From Web of "自定义对话框大小以匹配Theme.Holo.Light.Dialog"

您可以使用Theme.Holo.Light.Dialog.MinWidth正确调整布局的大小。

从文档:

public static final int Theme_Holo_Light_Dialog_MinWidth

Theme.Holo.Light.Dialog的变体,它有一个很好的普通对话框的最小宽度。

使用这种方法将通过ContextThemeWrapper代替上下文(使用此)到您的自定义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%,但比以前好:):

在这里输入图像说明

只需将两个值添加到您的自定义主题。

 <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> 

在我的自定义对话框中,我使用以下属性并设置对话框宽度以匹配父级,并且正确调整宽度。

  <item name="android:windowBackground">@null</item> <item name="android:windowIsFloating">false</item> 

你可以尝试在运行时改变你的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); 

如果你使用碎片。

两种情景

一个。 如果你需要它填满屏幕完全设置你的父母minWidthminHeight 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" 

湾 如果你需要它来缩放而不填满整个屏幕。 在RelativeLayout设置LinearLayout的子项之一,并将relative layouts width to match_parent设置relative layouts width to match_parent