Intereting Posts
Как ссылаться на значок из проекта библиотеки в AndroidManifest.xml приложения Как очистить этот неоднозначный вызов от Arrays.copyof ()? Изображение Android мерцает в изображении в recyclerview Синглтоны против контекста приложения в Android? FrameLayout отображается над AppBarLayout У Android-телефонов есть MAC-адрес при подключении к 3G? IllegalArgumentException: Файл содержит разделитель пути Android Как передать логическое значение между действиями в android? Инструменты сборки 21.1.2 – НЕОПРЕДЕЛЕННЫЙ ТОП-УРОВЕННЫЙ ИСКЛЮЧИТЕЛЬНЫЙ Служба Android Jelly Bean, которая получает все события касания Способ сохранения результатов HTML через JS Доступ к строке тела ответа OkHttp дважды приводит к ошибке IllegalStateException: закрыто Теоретический вопрос: загрузить внешний файл XML-Layout в Android Записи AppCompatSpinner не открывают TimePickerDialog при выборе его во второй раз. См. Подробности Set Selector for Button Программные проблемы

Запретить закрытие экрана активности Android на внешнем прикосновении

У меня есть активность, которая использует стиль Theme.Dialog, так что это плавающее окно над другим действием. Однако, когда я выхожу за диалоговое окно (в фоновом режиме), диалог закрывается. Как я могу остановить это поведение?

Это может вам помочь. Это способ справиться с внешним событием:

Как отменить диалоговое окно, например «Активность» при касании за пределами окна?

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

(PS: код использует WindowManager.LayoutParams)

Чтобы предотвратить отключение диалогового окна на задней клавише, используйте это

dialog.setCancelable(false); 

Чтобы предотвратить отклонение диалогового окна от внешнего контакта, используйте этот

  dialog.setCanceledOnTouchOutside(false); 

Фактически у вас есть Activity (даже если он похож на Dialog), поэтому вы должны вызывать setFinishOnTouchOutside(false) из своей активности, если вы хотите, чтобы он был открыт при нажатии фоновой активности.

EDIT: Это работает только с API-интерфейсом Android 11 или выше

Что для меня работало, так это создать dialogFragment, чтобы он не был отменен:

dialog.setCancelable (ложь);

Для более высокого API 10 Диалог исчезает, когда он находится на внешней стороне, тогда как в ниже, чем API 11, Диалог не исчезает. Для предотвращения этого вам необходимо:

В styles.xml : <item name="android:windowCloseOnTouchOutside">false</item>

ИЛИ

В onCreate() используйте: this.setFinishOnTouchOutside(false);

Примечание: для API 10 и ниже этот метод не имеет эффекта и не нужен.

Используйте этот код для меня

  AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.setCancelable(false); 

 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 teh dialog on onbackpressed of that activity 

Используйте setFinishOnTouchOutside(false) для API> 11 и не волнуйтесь, потому что его поведение по умолчанию для Android по отношению к этому тематическому диалоговому окну не будет закончено на внешнем прикосновении для API <11 🙂 !! Cheerss !!

Я использую это в 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); 
  alert.setCancelable(false); alert.setCanceledOnTouchOutside(false); 

Я думаю, это поможет вам. Я работал для меня

Вот мое решение:

 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select The Difficulty Level"); builder.setCancelable(false); 

Устанавливать диалоги cancelable быть ложным достаточно, и либо вы касаетесь вне диалогового окна предупреждения, либо нажмите кнопку «Назад», чтобы диалоговое окно предупреждения исчезло. Поэтому используйте это:

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(); 

Я столкнулся с той же проблемой. Чтобы обработать это, я установил OntouchListener в диалог и ничего не сделаю внутри. Но диалоговое окно отклоняется и при повороте экрана. Чтобы исправить это, я установил переменную, чтобы сказать мне, если диалог обычно отклоняется. Затем я устанавливаю OnDismissListener в свой диалог и внутри проверяю переменную. Если диалог обычно не работает, я ничего не могу сказать, иначе я снова запустил диалог (и установил его состояние, когда уволил в моем случае).

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(); } 

При использовании диалога в качестве действия в onCreate добавьте это

 setFinishOnTouchOutside(false); 

Просто,

 alertDialog.setCancelable(false); 

Запретить пользователю кликнуть вне диалогового окна.

Также возможно назначить различные действия, реализующие onCancelListener:

 alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { //Your custom logic } });