Android: Закрыть диалоговое окно при касании

#android #events #dialog #touch

#Android #Мероприятия #диалоговое #коснитесь

Вопрос:

Я хотел бы закрыть диалоговое окно в моем приложении для Android простым касанием экрана .. возможно ли это? Если да, то каким образом?

Я изучил возможность установки некоторого «onClickEven» в диалоговом окне, но оно не существует.

Как это было бы возможно?

Комментарии:

1. Возможно, этот учебник (android-close-dialog-window-on-touch) может вам помочь.

Ответ №1:

Вы можете использовать dialog.setCanceledOnTouchOutside(true); который закроет диалоговое окно, если вы нажмете u = вне диалогового окна.

Ответ №2:

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

 Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.mylayout);
//create a layout with imageview
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
        dialog.dismiss();
    } 
});
dialog.show();
  

Ответ №3:

 Dialog dialog = new Dialog(context)
{
    public boolean dispatchTouchEvent(MotionEvent event)  
    {
        dialog.dismiss();
        return false;
    }
};
  

И готово!

Комментарии:

1. Это работает. Android Studio выдает мне ошибку, хотя, потому что «возможно, диалоговое окно не было инициализировано». Чтобы избежать этого, просто замените dialog.dismiss () на this.dismiss()

Ответ №4:

Вы можете расширить Dialog класс и переопределить dispatchTouchEvent() метод.

РЕДАКТИРОВАТЬ: Также вы можете реализовать Window.Callback интерфейс и установить его в качестве обратного вызова окна диалога с помощью dialog.getWindow().setCallback() . Эта реализация должна вызывать соответствующие методы диалога или обрабатывать события по-своему.

Ответ №5:

Если кто-то все еще ищет решение для закрытия диалога по событию onTouch, вот фрагмент кода:

 public void onClick(View v) {
                AlertDialog dialog = new AlertDialog(MyActivity.this){

                    @Override
                    public boolean dispatchTouchEvent(MotionEvent event)  
                    {
                        dismiss();
                        return false;
                    }

                };
                dialog.setIcon(R.drawable.MyIcon);
                dialog.setTitle("MyTitle");
                dialog.setMessage("MyMessage");
                dialog.setCanceledOnTouchOutside(true);
                dialog.show();

        }