Я реализовал собственный диалог для моего приложения. Я хочу реализовать это, когда пользователь щелкает за пределами диалогового окна, диалоговое окно будет закрыто. Что я должен сделать для этого?
источник
Я реализовал собственный диалог для моего приложения. Я хочу реализовать это, когда пользователь щелкает за пределами диалогового окна, диалоговое окно будет закрыто. Что я должен сделать для этого?
Вы можете использовать, dialog.setCanceledOnTouchOutside(true);
который закроет диалог, если вы нажмете за пределами диалога.
Что-то вроде,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
Или если ваш диалог не в модели, то
1 - Установите флаг FLAG_NOT_TOUCH_MODAL
для атрибута окна вашего диалога
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Добавить еще один флаг в свойствах окон ,, FLAG_WATCH_OUTSIDE_TOUCH
- этот диалог предназначен для получения события касания за пределами видимой области.
3 - Переопределить onTouchEvent()
диалог и проверить тип действия. если тип действия « MotionEvent.ACTION_OUTSIDE
означает», пользователь взаимодействует за пределами области диалога. Таким образом, в этом случае вы можете изменить свой диалог или решить, что вы хотите выполнить. просмотреть открытку?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Для получения дополнительной информации см. Как закрыть пользовательский диалог на основе точек касания? и Как отменить ваш немодальный диалог, когда его касаются за пределами области диалога
Просто используйте
источник
Вы можете использовать эту реализацию onTouchEvent. Это предотвращает реакцию под действием на событие касания (как упомянуто как).
Источник: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
источник
Или, если вы настраиваете диалог, используя тему, определенную в вашем стиле xml, поместите эту строку в вашу тему:
источник
dialog.setCanceledOnTouchOutside(true);
работает чудесно.закрыть диалог на ощупь снаружи.
И если вы не хотите закрывать на ощупь снаружи, используйте код ниже:
источник
Этот метод должен полностью избегать действий ниже серой области, извлекающих события щелчка.
Удалите эту строку, если она у вас есть:
Поместите это в свою деятельность, созданную
затем переопределить событие касания с этим
источник
Вы можете попробовать это: -
или
И если у вас есть, то
AlterDialog.Builder
вы можете попробовать это: -источник
Этот код используется для того, чтобы при щелчке по диалоговому окну использовать время скрытия входа в систему, а когда пользователь щелкает по внешней стороне диалогового окна, когда время ввода и вывода софта близко.
источник
Другое решение, этот код был взят из исходного кода Android.
Window
Вам просто нужно добавить эти два метода в исходный код вашего диалога.Это решение не имеет этой проблемы:
источник
Звоните
dialog.setCancelable(false);
из вашей деятельности / фрагмент.источник
Следующее сработало для меня:
источник
Вы можете
background
занять все размеры экранаtransparent
и прослушатьonClick
событие наdismiss
нем.источник
Вот код
Попробуй это . Вы можете скрыть клавиатуру, когда вы касаетесь снаружи
источник