如何设置Android对话框的MaxWidth?

时间:2011-05-26 18:14:45

标签: android layout dialog

我有一个自定义样式的对话框,它使用我在XML文件中定义的布局。我希望这个对话框以纵向模式填充屏幕的宽度,但在横向模式下只能填充400dip。 MaxWidth似乎是实现这一目标的完美方式,但我无法弄清楚如何为对话框样式或XML布局指定MaxWidth。

4 个答案:

答案 0 :(得分:3)

假设您使用名为layout/dialog_core.xml的下一个布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" >

    //All your dialog views go here.... 

</LinearLayout>

然后,您可以再创建两个文件:layout/dialog.xmllayout-land/dialog.xml

layout/dialog.xml文件不会限制宽度:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" >

    <include layout="@layout.dialog_core.xml" />

</LinearLayout>

虽然您的layout-land/dialog.xml应该有宽度限制:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:maxWidth="400dp" >

    <include layout="@layout.dialog_core.xml" />

</LinearLayout>

当然,您现在需要在代码中使用R.layout.dialog布局。

P.S。我仅将LinearLayout用于示例目的。任何布局视图都可以。

答案 1 :(得分:0)

您可以在此处找到实际解决方案:setting a max width for my dialog

答案是使用对话框主题的活动,但考虑到它基于Window对象,它应该太复杂,无法使其适应对话框。

答案 2 :(得分:0)

我通过在显示对话框后更改对话框的窗口布局来实现BottomSheetDialog:

private int maxWidthDp = 600;

public void showDialog(Context context) {
    BottomSheetDialog dialog = new BottomSheetDialog(context);
    // set up the dialog...
    dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialogInterface) {
            Configuration configuration = context.getResources().getConfiguration();
            if (configuration.screenWidthDp > maxWidthDp) {
                // ensure maximum dialog size
                dialog.getWindow().setLayout(dpToPixels(maxWidthDp), -1);
            }
        }
    });
    dialog.show();
}

dpToPixels是一个辅助函数,可将dp值转换为像素值,例如像这里https://stackoverflow.com/a/8399445/1396068

答案 3 :(得分:-3)

您是否尝试在自定义xml中设置android:minWidthandroid:minHeight