Пользовательский затемненный экран с диалогом - PullRequest
27 голосов
/ 06 июня 2011

В Android при появлении диалогового окна экран за ним тускнеет.Есть ли способ контролировать, как это выглядит?Например, сделать его более или менее тусклым или использовать какой-то шаблон?

Ответы [ 5 ]

39 голосов
/ 07 июня 2011

Да, это так. Вы можете контролировать это.

После создания диалога:

WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();  
lp.dimAmount=0.0f; // Dim level. 0.0 - no dim, 1.0 - completely opaque
dialog.getWindow().setAttributes(lp);

Upd : вы даже можете добавить размытие за диалог:

dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

Размытие не рекомендуется, поскольку API14 :

Эта константа устарела на уровне API 14.
Размытие больше не поддерживается.

25 голосов
/ 15 сентября 2014

Или вы можете сделать:

dialog.getWindow().setDimAmount(0.5f);
15 голосов
/ 30 июля 2012

Это решение не сработало для меня. Есть еще один вариант, вы можете отменить флаг, управляющий затемнением. Этот код работал для меня:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
9 голосов
/ 28 апреля 2017

Отвечаю довольно поздно, но я уверен, что со временем вещи устаревают, поэтому мой ответ определенно кому-нибудь поможет.Прежде всего создайте диалоговое окно:

dialog = new Dialog(ActivityName.this);
dialog .setCancelable(false);
dialog .setContentView(R.layout.dialog_layout);

Затем откройте окно этого диалогового окна, добавьте флаг с именем FLAG_DIM_BEHIND и, наконец, установите величину затемнения на экране.

Window window = dialog.getWindow();
if(window != null){
   window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); // This flag is required to set otherwise the setDimAmount method will not show any effect
   window.setDimAmount(0.5f); //0 for no dim to 1 for full dim
}

Затем покажитеваш диалог,

dialog.show();

И прежде чем закрыть свой диалог, снимите флажки:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

И затем отклоните:

dialog.dismiss();
1 голос
/ 21 декабря 2016

Следующие параметры у меня работали на Android 5.1

WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DIM_BEHIND,
                PixelFormat.TRANSLUCENT);

params.dimAmount = 0.65f;

параметры могут быть назначены диалогу.

dialog.getWindow().addContentView(view, params)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...