Когда мы показываем AlertDialog в Android, он отображается в центре экрана. Есть ли способ поменять позицию?
Когда мы показываем AlertDialog в Android, он отображается в центре экрана. Есть ли способ поменять позицию?
Ответы:
После поиска в различных сообщениях я нашел решение.
Код размещен ниже:
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 значение снизу вверх.
wmlp.x = 100; //x position wmlp.y = 100;
вам просто набор гравитация wmlp.gravity = Gravity.TOP | Gravity.LEFT;
достаточно
Если вы, например, хотите переместить диалоговое окно прогресса немного ниже и не устанавливать точное положение пикселя, этого достаточно:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Эти ответы будут перемещать положение 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, чей ответ на: remove border, padding from Dialog завершил эту картину.