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

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

Ответ 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();