Android 自定义对话框大小以匹配Theme.Holo.Light.Dialog
如果我有一个活动的主题设置为Android 自定义对话框大小以匹配Theme.Holo.Light.Dialog,android,android-layout,dialog,android-xml,android-dialog,Android,Android Layout,Dialog,Android Xml,Android Dialog,如果我有一个活动的主题设置为theme.Holo.Light.Dialog,它的规模将非常大。在纵向模式下,它将几乎完全填满手机屏幕,但在横向模式下,它不会过长。例如,在这张来自谷歌的图片中,你可以看到对话框没有填满整个屏幕 它既不会折叠以匹配标题的宽度,也不会像使用扩展Dialog类的类来构建自己的对话框那样 这就是我的布局将要发生的事情 我需要将哪些属性应用于LinearLayout以使其具有良好的缩放效果?在我的自定义对话框中,我使用以下属性并设置对话框宽度,以正确匹配父级及其宽度缩放
theme.Holo.Light.Dialog
,它的规模将非常大。在纵向模式下,它将几乎完全填满手机屏幕,但在横向模式下,它不会过长。例如,在这张来自谷歌的图片中,你可以看到对话框没有填满整个屏幕
它既不会折叠以匹配标题的宽度,也不会像使用扩展Dialog类的类来构建自己的对话框那样
这就是我的布局将要发生的事情
我需要将哪些属性应用于LinearLayout以使其具有良好的缩放效果?在我的自定义对话框中,我使用以下属性并设置对话框宽度,以正确匹配父级及其宽度缩放
<item name="android:windowBackground">@null</item>
<item name="android:windowIsFloating">false</item>
@null
假的
两种情况
a。如果您需要它来填充屏幕,请将您的父母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"
b。如果您需要它在不填充整个屏幕的情况下进行缩放。在
相对布局中设置线性布局的一个子项
,并设置相对布局宽度以匹配父项
是否可以尝试在运行时更改对话框尺寸,如下所示:
DisplayMetrics metrics = getResources().getDisplayMetrics();
int width = metrics.widthPixels;
yourDialog.show();
yourDialog.getWindow().setLayout((6 * width)/7, LayoutParams.WRAP_CONTENT);
或
如果您使用片段。您可以使用Theme.Holo.Light.Dialog.MinWidth
来正确调整布局大小
从文件中:
公共静态最终整数主题\u全息\u灯光\u对话框\u最小宽度
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>
@android:dimen/dialog\u min\u width\u 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>
95%
看起来,您发布的图片中对话框的宽度约为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>
@android:dimen/dialog\u min\u width\u major
@android:dimen/dialog\u min\u width\u minor
例如
@空的
真的
@彩色/透明
真的
@空的
@android:dimen/dialog\u min\u width\u major
@android:dimen/dialog\u min\u width\u minor
你所说的是什么意思?正确设置宽度比例
。这两行代码去哪里了?在style.xml中,放这个@颜色/覆盖\u背景假真,并将对话样式设置为CustomDialogTheme,宽度设置为与\u父项匹配。这将填充整个屏幕。如果我将windowIsFloating
设置为true,它将折叠以匹配布局中的第一个文本视图。您可以发布自定义对话框XML吗?@Indiandroid我将代码发布到Pastebin中。您可以通过计算设备的高度和宽度,通过编程设置对话框布局的宽度。@可能,但我认为主题设置为theme.dialog+1的活动不会出现这种情况。我可以看到。但理想情况下不应该是这样。我可以在代码中更改它,但是这也没有将宽度设置为与原始对话框的宽度相匹配。嘿,谢谢。它肯定比我拥有的要好,但它仍然不符合我的活动,它的主题设置为@android:style/theme.Holo.Light.Dialog
。这里有一些照片。底部的对话框是正确的。我还需要将我的自定义主题应用于对话框(更改微调器、搜索栏等的颜色),所以这有点糟糕,你不觉得吗?我不能有多个主题。我能把它实现到我自己的主题中吗?@MikkoP我对你想要的输出有一些疑问。嘿,正如我们所讨论的,我需要为我的对话框应用一个自定义主题。不仅是一个布局,而且是我的布局中seekbar和微调器的主题。我有一个有一个。如果我使用theme.Holo.Light.Dialog.MinWidth
,你知道我如何应用这个主题吗?@MikkoP Yea,我可以帮你。让我们来看看。@MikkoP您是否能够通过Spinner在单独的弹出窗口而不是下拉列表中显示其选项来解决问题?
<!-- 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>
<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>