Предотвращение закрытия диалога активности Android на внешнем касании
У меня есть действие, которое использует тему.Стиль диалога таков, что это плавающее окно над другим действием. Однако, когда я нажимаю вне диалогового окна (в фоновом режиме), диалоговое окно закрывается. Как я могу остановить это поведение?
18 ответов
Это может помочь вам. Это способ обработки сенсорного внешнего события:
как отменить Диалог, тематический как активность при прикосновении за окном?
ловя событие и ничего не делая, я думаю, вы можете предотвратить закрытие. Но что странно, так это то, что поведение по умолчанию вашего диалога активности должно быть не закрыть себя, когда вы касаетесь снаружи.
(PS: код использует Ему.LayoutParams)
чтобы предотвратить отклонение диалогового окна при нажатии клавиши назад, используйте это
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);
использовать 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);
Я думаю, это поможет вам.Это сработало для меня
вот мое решение:
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();