Показывать AlertDialog в любом месте экрана - PullRequest
103 голосов
/ 29 марта 2011

Когда мы показываем AlertDialog в Android, он показывает в центре экрана.Есть ли способ изменить позицию?

Ответы [ 4 ]

241 голосов
/ 19 мая 2011

После поиска в различных постах я нашел решение.

Код размещен ниже:

private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {

            if(item == 0) {

            } else if(item == 1) {

            } else if(item == 2) {

            }
        }
    });

     AlertDialog dialog = builder.create();
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
     WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();

 wmlp.gravity = Gravity.TOP | Gravity.LEFT;
 wmlp.x = 100;   //x position
 wmlp.y = 100;   //y position

 dialog.show();

Здесь значение x position - это пиксели слева направо. Для y значение позиции снизу вверх.

14 голосов
/ 09 августа 2012

Если вы, например, хотите переместить диалоги прогресса чуть ниже и не устанавливать позицию пикселя exakt, то этого достаточно:

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
5 голосов
/ 02 ноября 2013

Чтобы настройки вступили в силу, я добавил следующий код
dialog.getWindow().setAttributes(wmlp);

после изменения значения wmlp в ответе gypsicoder, или настройка wmlp не вступает в силу в моем тесте.

0 голосов
/ 10 декабря 2015

Эти ответы будут перемещать позицию AlertDialog, однако позиция отображаемого диалогового окна также будет включать отступы вокруг диалогового окна.

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

<resources>
    <!--  Example app theme - mine uses the below -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:alertDialogTheme">@style/MyDialogTheme</item>
    </style>

    <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Full width -->
        <item name="android:layout_width">fill_parent</item>

    <!-- Null window background kills surrounding padding -->
        <item name="android:windowBackground">@null</item>
        <item name="android:windowNoTitle">true</item>

     </style>
</resources> 

, а также настройкаWindow.LayoutParameters, как описано в принятом ответе.

Специальный крик @David Caunt, чей ответ по адресу: удалить границу, заполнение из диалога завершил эту картину.

...