Как установить MaxWidth диалогового окна Android? - PullRequest
5 голосов
/ 26 мая 2011

У меня есть диалог с пользовательским стилем, который использует макет, который я определил в файле XML.Я хотел бы, чтобы этот диалог заполнил ширину экрана в портретном режиме, но только около 400dip в ландшафтном режиме.MaxWidth, кажется, идеальный способ сделать это, но я не могу понять, как назначить MaxWidth стилю диалога или разметке XML.

Ответы [ 4 ]

3 голосов
/ 26 мая 2011

Предполагается, что вы используете следующий файл макета с именем 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.xml и layout-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 в своем коде сейчас.

PS Я использовал LinearLayout только для примера.Подойдет любой вид компоновки.

0 голосов
/ 06 января 2019

Я достиг этого для 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

0 голосов
/ 15 ноября 2014

Вы можете найти реальное решение здесь: установить максимальную ширину для моего диалога

Ответ - для действия, использующего тему диалога, но учитывая, что оно основано на объекте Window,оно должно быть слишком сложным, чтобы адаптировать его для диалога.

0 голосов
/ 26 мая 2011

Вы пытались установить android:minWidth и android:minHeight в своем пользовательском xml

...