Android. Позиционирование Dialog

В статье рассмотрены способы позиционирования диалогового окна относительно дисплея устройства.
При отображении пользователю диалогового окна с информацией окно диалога по умолчанию позиционируется по центру дисплея, т.е. по центру по вертикали и по горизонтали. Эту логику возможно изменить, отпозиционировав диалоговое окно в любой части экрана.
Особенность координат в том, что по умолчанию координаты X и Y раны 0. Точка пересечения оси X и Y (0, 0) находится в центре диалогового окна, а не в левом верхнем углу дисплея. Это нужно учитывать.
Для примера создадим простое диалоговое окно в OnCreate вашей Activity:
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("Are you sure?").setPositiveButton("OK", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
dialog.dismiss();
}
});
Dialog dialog = builder.create();
dialog.show();
Продемонстрируем несколько примеров позиционирования диалогового окна:
- Смещение вниз от центра
- Смещение вверх от центра
- Смещение влево от центра
- Смещение вправо от центра
- Прилипание к нижней части экрана с возможностью задания отступа от неё
- Прилипание к верхней части экрана с возможностью задания отступа от неё
- Прилипание к правой части экрана с возможностью задания отступа от неё
- Прилипание к левой части экрана с возможностью задания отступа от неё
- Множественное прилипание(верх-лево, низ-право и т.п.
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
Для применения результатов позиционирования используется следующая запись:
dialog.getWindow().setAttributes(params);
Рассмотрим каждый из пунктов и представим результаты.
1) Смещение вниз от центра
params.y = 100;
Результат позиционирования:

2) Смещение вверх от центра
params.y = -100;
Результат позиционирования:

3) Смещение влево от центра
params.x = -50;
Результат позиционирования:

4)Смещение вправо от центра
params.x = 50;
Результат позиционирования:

5) Прилипание к нижней части экрана с возможностью задания отступа от неё
params.gravity = Gravity.BOTTOM;
params.y = 50;
Результат позиционирования:

6) Прилипание к верхней части экрана с возможностью задания отступа от неё
params.gravity = Gravity.TOP;
params.y = 50;
Результат позиционирования:

7) Прилипание к правой части экрана с возможностью задания отступа от неё
params.gravity = Gravity.RIGHT;
params.x = 30;
Результат позиционирования:

8) Прилипание к левой части экрана с возможностью задания отступа от неё
params.gravity = Gravity.LEFT;
params.x = 20;
Результат позиционирования:

9) Множественное прилипание
— верх-лево
params.gravity = Gravity.LEFT | Gravity.TOP;
Результат позиционирования:

— низ-право
params.gravity = Gravity.RIGHT | Gravity.BOTTOM;
Результат позиционирования:

Используя все эти полученные знания вы можете позиционировать диалоговое окно как захотите!
0 комментариев