Запретить диалог активности Android от закрытия на внешнем прикосновении



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

867   18  

18 ответов:

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

как отменить Диалог тематический, как деятельность при прикосновении за окном?

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

(PS: код использует Ему.Ни)

чтобы предотвратить диалоговое окно от получения уволен на ключ нажал использовать этот

dialog.setCancelable(false);

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

 dialog.setCanceledOnTouchOutside(false);

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

EDIT: это работает только с Android API уровня 11 или выше

что работало для меня было создать DialogFragment установить его не отменяется:

dialog.setCancelable(false);

для более высокого 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);

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

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

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

setFinishOnTouchOutside(false);

просто

alertDialog.setCancelable(false);

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

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

Я использую это в onCreate(), кажется, работает на любой версии Android; проверено на 5.0 и 4.4.x, не может тестировать на пряниках, устройства 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);

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

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

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

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

строитель.setCancelable (false);


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

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

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

Это прекрасный ответ на все ваши вопросы.... Надеюсь, вам понравится кодирование в 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();

Comments

    Ничего не найдено.