如果我有一个Activity,它的主题设置为Theme.Holo.Light.Dialog
,它会很好地适应屏幕大小。在竖屏模式下,它几乎可以填满手机屏幕,但在横屏模式下不会拉伸得过长。例如,在谷歌的这张图片中,您可以看到对话框没有填满整个屏幕。
如果您使用继承Dialog类的类自己构建对话框,它也不会折叠以适应标题的宽度。
这就是我的布局会发生的情况。
我需要应用哪些属性来使LinearLayout缩放得漂亮?
如果我有一个Activity,它的主题设置为Theme.Holo.Light.Dialog
,它会很好地适应屏幕大小。在竖屏模式下,它几乎可以填满手机屏幕,但在横屏模式下不会拉伸得过长。例如,在谷歌的这张图片中,您可以看到对话框没有填满整个屏幕。
如果您使用继承Dialog类的类自己构建对话框,它也不会折叠以适应标题的宽度。
这就是我的布局会发生的情况。
我需要应用哪些属性来使LinearLayout缩放得漂亮?
您可以使用 Theme.Holo.Light.Dialog.MinWidth
来正确设置布局的大小。
根据文档:
public static final int Theme_Holo_Light_Dialog_MinWidth
Theme.Holo.Light.Dialog 的变体,为常规对话框提供了良好的最小宽度。
使用此方法的方式是通过将 ContextThemeWrapper 传递给自定义 Dialog 的构造函数中的 Context (使用 this)的位置:
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'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:dimen/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%,但比以前好了:)
@android:style/Theme.Holo.Light.Dialog
。这里有一些图片。底部的对话框是正确的。http://s24.postimg.org/7dzk6dbt1/device_2013_12_01_130746.png http://s18.postimg.org/6hkao2pnd/device_2013_12_01_130722.png 我还需要将我的自定义主题应用于对话框(以更改旋转器、拖动条等的颜色),所以这有点糟糕,不是吗?我不能有多个主题。我能否以某种方式将其实现到自己的主题中? - MikkoPandroid:spinnerMode="dropdown"
,现在它们正常工作了。不过Eclipse并不太满意:Resouce id 0x1010081 is not of type STYLE (instead attr)
。 - MikkoP<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>
windowIsFloating
设置为 true,则会折叠以匹配布局中的第一个 TextView。 - MikkoP两种情况
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"
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);
如果你使用Fragments。