Запретить диалог активности Android от закрытия на внешнем прикосновении
У меня есть деятельность, которая использует тему.Стиль диалога таков, что это плавающее окно над другой деятельностью. Однако, когда я нажимаю за пределами диалогового окна (в фоновом режиме), диалоговое окно закрывается. Как я могу остановить это поведение?
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