Android: закрыть диалоговое окно на ощупь - PullRequest
12 голосов
/ 27 апреля 2011

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

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

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

Ответы [ 5 ]

32 голосов
/ 30 мая 2011

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

14 голосов
/ 16 апреля 2012

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

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();
7 голосов
/ 22 марта 2013
Dialog dialog = new Dialog(context)
{
    public boolean dispatchTouchEvent(MotionEvent event)  
    {
        dialog.dismiss();
        return false;
    }
};

И все готово!

1 голос
/ 12 февраля 2014

Если кто-то все еще ищет решение отклонить диалог с помощью события 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();

        }
1 голос
/ 27 апреля 2011

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

EDIT : Также вы можете реализовать интерфейс Window.Callback и установить его в качестве обратного вызова диалогового окна, используя dialog.getWindow().setCallback(). Эта реализация должна вызывать соответствующие методы диалога или обрабатывать события по-своему.

...