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

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

在此处输入图像描述

它不会崩溃以匹配标题的宽度,如果你有一个扩展Dialog类的类有你自己的Dialog构建会发生什么。

这是我的布局会发生的事情。

在此处输入图像描述

我需要将哪些属性应用于LinearLayout才能使其变得漂亮?

您可以使用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的定义方式:

  

来自dimens.xml

@android:扪/ dialog_min_width_major:

  65% 

@android:扪/ dialog_min_width_minor:

  95% 

看起来,您发布的图片中对话框的宽度约为65%。 在肖像模式中,它将是95%。

老实说,在纵向模式下宽度看起来不像95%,但它比以前更好:):

在此处输入图像描述

只需在自定义主题中添加两个值即可。

 @android:dimen/dialog_min_width_major @android:dimen/dialog_min_width_minor 

例如

  

在我的自定义对话框中,我使用以下属性并设置对话框宽度以匹配父级和它的宽度比例。

  @null false 

您可以尝试在运行时更改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); 

如果你使用碎片。

两种情景

一个。 如果您需要它来填充屏幕,请将您的父母minWidthminHeight1000dp

 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