#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();
}