Как управлять шириной и высотой диалогового окна оповещения по умолчанию в Android?


AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Title");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog alert = builder.create();

Я использую приведенный выше код для отображения диалогового окна предупреждения. По умолчанию он заполняет экран по ширине и wrap_content по высоте.
Как я могу контролировать ширину и высоту диалогового окна оповещения по умолчанию ?
Я попробовал:

alert.getWindow().setLayout(100,100); // It didn't work.

Как получить параметры макета в окне оповещения и вручную установить ширину и высоту?

6 53

6 ответов:

только небольшое изменение в коде Sat, установите макет после show () метод alertDialog.

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Title");
alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height.

или вы можете сделать это на моем пути.

alertDialog.show();
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();

lp.copyFrom(alertDialog.getWindow().getAttributes());
lp.width = 150;
lp.height = 500;
lp.x=-170;
lp.y=100;
alertDialog.getWindow().setAttributes(lp);

Ок, я могу управлять шириной и высотой с помощью класса Builder. Я использовал

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Title");
AlertDialog alertDialog = builder.create();
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height.
alertDialog.show();

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

<item name="windowMinWidthMajor">...</item>
<item name="windowMinWidthMinor">...</item>

Если это происходит, это так же просто, как предоставить свой собственный стиль конструктору [builder, который принимает themeResId](http://developer.android.com/reference/android/app/AlertDialog.Builder.html#AlertDialog.Builder(android.content.Context, int)) доступный API 11+

<style name="WrapEverythingDialog" parent=[whatever you were previously using]>
    <item name="windowMinWidthMajor">0dp</item>
    <item name="windowMinWidthMinor">0dp</item>
</style>

это работает также путем добавления .getWindow().setLayout(width, height) после show()

alertDialogBuilder
            .setMessage("Click yes to exit!")
            .setCancelable(false)
            .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, close
                    // current activity
                    MainActivity.this.finish();
                }
              })
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
                }
            }).show().getWindow().setLayout(600,500);

Я не знаю, можете ли вы изменить высоту/ширину AlertDialog по умолчанию, но если вы хотите это сделать, я думаю, что вы можете сделать это, создав свой собственный диалог. Вы просто должны дать android:theme="@android:style/Theme.Dialog" в манифесте android.xml для вашей деятельности и может написать весь макет в соответствии с вашим требованием. вы можете установить высоту и ширину пользовательского диалогового окна из XML-файла ресурса Android.

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

 AlertDialog.Builder builderSingle = new 
 AlertDialog.Builder(getActivity());
 builderSingle.setTitle("Title");

 final AlertDialog alertDialog = builderSingle.create();
 alertDialog.show();

 Rect displayRectangle = new Rect();
 Window window = getActivity().getWindow();

 window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

 alertDialog.getWindow().setLayout((int)(displayRectangle.width() * 
 0.8f), (int)(displayRectangle.height() * 0.8f));

P. S: сначала покажите диалоговое окно, а затем попробуйте изменить атрибуты макета окна