У меня есть действие, использующее стиль Theme.Dialog, так что это плавающее окно над другим действием. Однако, когда я выхожу за диалоговое окно (в фоновом режиме), диалог закрывается. Как я могу остановить это поведение?
Запретить закрытие экрана активности Android на внешнем прикосновении
Ответ 1
Это может вам помочь. Это способ обработки внешнего события касания:
Как отменить диалог, например "Активность" , когда он коснулся за пределами окна?
Улавливая событие и ничего не делая, я думаю, вы можете предотвратить закрытие. Но странно, однако, что поведение по умолчанию вашего диалогового окна активности должно быть не, чтобы закрыть себя при касании снаружи.
(PS: код использует WindowManager.LayoutParams)
Ответ 2
Чтобы предотвратить отключение диалогового окна от нажатой клавиши назад, используйте
dialog.setCancelable(false);
Чтобы предотвратить отклонение диалогового окна от внешнего контакта, используйте
dialog.setCanceledOnTouchOutside(false);
Ответ 3
Фактически у вас есть Activity (даже если он похож на Dialog), поэтому вы должны вызывать setFinishOnTouchOutside(false)
из своей активности, если вы хотите, чтобы он был открыт при нажатии фоновой активности.
EDIT: Это работает только с API-интерфейсом Android версии 11 или выше
Ответ 4
Для меня сработало создание DialogFragment
набора, который нельзя отменить:
dialog.setCancelable(false);
Ответ 5
Для более высокого API 10 Диалог исчезает, когда он находится на внешней стороне, тогда как ниже API 11 Диалог не исчезает. Для предотвращения этого вам нужно сделать:
В styles.xml
: <item name="android:windowCloseOnTouchOutside">false</item>
ИЛИ
В методе onCreate()
используйте: this.setFinishOnTouchOutside(false);
Примечание: для API 10 и ниже этот метод не имеет эффекта и не нужен.
Ответ 6
При использовании диалога в качестве действия в onCreate добавьте это
setFinishOnTouchOutside(false);
Ответ 7
Достаточно установить настройку диалога cancelable как false, и либо вы коснетесь вне диалогового окна предупреждения, либо нажмите кнопку "Назад", чтобы диалоговое окно предупреждения исчезло. Поэтому используйте этот:
setCancelable(false)
И другая функция больше не нужна:
dialog.setCanceledOnTouchOutside(false);
Если вы создаете временное диалоговое окно и задаетесь вопросом, куда поставить эту строку кода, вот пример:
new AlertDialog.Builder(this)
.setTitle("Trial Version")
.setCancelable(false)
.setMessage("You are using trial version!")
.setIcon(R.drawable.time_left)
.setPositiveButton(android.R.string.yes, null).show();
Ответ 8
Использовать этот код для меня
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
Ответ 9
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
//use this to dismiss the dialog on outside click of dialog
dialog.setCanceledOnTouchOutside(false);
//use this for not to dismiss the dialog on outside click of dialog.
Просмотрите эту ссылку, чтобы узнать больше о диалоге.
dialog.setCancelable(false);
//used to prevent the dismiss of dialog on backpress of that activity
dialog.setCancelable(true);
//used to dismiss the dialog on onbackpressed of that activity
Ответ 10
Просто,
alertDialog.setCancelable(false);
запретить пользователю кликнуть вне диалогового окна.
Ответ 11
Используйте setFinishOnTouchOutside(false)
для API > 11 и не волнуйтесь, потому что его поведение по умолчанию для Android по умолчанию, что диалог тематического действия не будет завершен при внешнем касании для API < 11:) Приветствия!
Ответ 12
Я использую это в onCreate(), похоже, работает на любой версии Android; протестированные на 5.0 и 4.4.x, не могут протестировать Gingerbread, устройства Samsung (Примечание 1 работает в GB) имеют это по умолчанию:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
setFinishOnTouchOutside(false);
}
else
{
getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
}
super.onCreate(savedInstanceState);
Ответ 13
alert.setCancelable(false);
alert.setCanceledOnTouchOutside(false);
Я думаю, это поможет вам. Я работал у меня
Ответ 14
Вот мое решение:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select The Difficulty Level");
builder.setCancelable(false);
Ответ 15
Также возможно назначить различные действия, реализующие onCancelListener:
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialogInterface) {
//Your custom logic
}
});
Ответ 16
У меня была та же проблема. Чтобы обработать его, я установил OntouchListener
в диалог и ничего не сделаю внутри. Но Dialog отключается и при повороте экрана. Чтобы исправить это, я установил переменную, чтобы сказать мне, если диалог обычно отклоняется. Затем я устанавливаю OnDismissListener
в мой диалог и внутри проверяю переменную. Если диалог вообще не работает, я ничего не делаю, иначе я снова запустил диалог (и установил его состояние, как в случае отклонения в моем случае).
Ответ 17
builder.setCancelable(ложь);
public void Mensaje (View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("¿Quieres ir a el Menú principal?");
builder.setMessage("Al presionar SI iras a el menú y saldras de la materia.");
builder.setPositiveButton("SI", null);
builder.setNegativeButton("NO", null);
builder.setCancelable(false);
builder.show();
}
Ответ 18
Диалог оповещений устарел, поэтому используйте диалог диалога = новый диалог (это);
Для предотвращения близкого внешнего прикосновения
dialog.setCanceledOnTouchOutside(false);
Ответ 19
Это идеальный ответ на все ваши вопросы.... Надеюсь, вам понравится кодирование в Android
new AlertDialog.Builder(this)
.setTitle("Akshat Rastogi Is Great")
.setCancelable(false)
.setMessage("I am the best Android Programmer")
.setPositiveButton("I agree", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();