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

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

Я изучил настройку некоторого "onClickEven" в диалоговом окне, но он не существует.

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

Ответ 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;
    }
};

И все готово!

Ответ 4

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

EDIT. Также вы можете реализовать интерфейс 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();

        }