Показать AlertDialog в любом положении экрана

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

Ответ 1

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

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

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 - это пиксели слева направо. Для позиции y позиция снизу вверх.

Ответ 2

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

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;

Ответ 3

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

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

Ответ 4

Эти ответы будут перемещать позицию 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, ответ на который: удалить границу, дополнение из диалога завершил эту картинку.