Как управлять шириной и высотой диалогового окна оповещения по умолчанию в 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 ответов:
только небольшое изменение в коде 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: сначала покажите диалоговое окно, а затем попробуйте изменить атрибуты макета окна