Ich habe einen benutzerdefinierten Dialog für meine Anwendung implementiert. Ich möchte implementieren, dass der Dialog geschlossen wird, wenn der Benutzer außerhalb des Dialogfelds klickt. Was muss ich dafür tun?
quelle
Ich habe einen benutzerdefinierten Dialog für meine Anwendung implementiert. Ich möchte implementieren, dass der Dialog geschlossen wird, wenn der Benutzer außerhalb des Dialogfelds klickt. Was muss ich dafür tun?
Sie können verwenden dialog.setCanceledOnTouchOutside(true);
, um den Dialog zu schließen, wenn Sie außerhalb des Dialogs berühren.
Etwas wie,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
Oder wenn Ihr Dialog dann nicht modelliert ist,
1 - Setzen Sie das Flag FLAG_NOT_TOUCH_MODAL
für das Fensterattribut Ihres Dialogfelds
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Fügen Sie den Windows-Eigenschaften ein weiteres Flag hinzu. FLAG_WATCH_OUTSIDE_TOUCH
- Dieses Flag dient zum Empfangen von Berührungsereignissen außerhalb des sichtbaren Bereichs.
3 - onTouchEvent()
Dialog überschreiben und nach Aktionstyp suchen. Wenn der Aktionstyp ' MotionEvent.ACTION_OUTSIDE
' bedeutet, interagiert der Benutzer außerhalb des Dialogbereichs. In diesem Fall können Sie Ihren Dialog verkleinern oder entscheiden, was Sie ausführen möchten. Klartext anzeigen?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Weitere Informationen finden Sie unter So schließen Sie ein benutzerdefiniertes Dialogfeld basierend auf Berührungspunkten. und So schließen Sie Ihren nicht modalen Dialog, wenn Sie ihn außerhalb des Dialogbereichs berühren
Einfach benutzen
quelle
Sie können diese Implementierung von onTouchEvent verwenden. Es verhindert, dass unter Aktivität auf das Berührungsereignis reagiert wird (wie bereits erwähnt).
Quelle: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
quelle
Wenn Sie den Dialog mit einem in Ihrer XML-Stil definierten Thema anpassen, fügen Sie diese Zeile in Ihr Thema ein:
quelle
dialog.setCanceledOnTouchOutside(true);
funktioniert wunderbar.um den Dialog bei Berührung außerhalb zu schließen.
Und wenn Sie bei Berührung außerhalb nicht schließen möchten, verwenden Sie den folgenden Code:
quelle
Diese Methode sollte Aktivitäten unterhalb des grauen Bereichs, bei denen Klickereignisse abgerufen werden, vollständig vermeiden.
Entfernen Sie diese Zeile, wenn Sie es haben:
Setzen Sie dies auf Ihre erstellte Aktivität
Überschreiben Sie dann das Berührungsereignis damit
quelle
Sie können dies versuchen: -
oder
Und wenn Sie eine haben
AlterDialog.Builder
, können Sie dies versuchen: -quelle
Dieser Code wird verwendet, wenn Sie beim Klicken auf das Dialogfeld klicken, um die Eingabe zu verbergen, und wenn der Benutzer zu diesem Zeitpunkt auf die Außenseite des Dialogfelds klickt, wenn sowohl die Soft-Eingabe als auch das Dialogfeld geschlossen sind.
quelle
Eine andere Lösung, dieser Code wurde aus dem Android-Quellcode von
Window
Sie sollten nur diese beiden Methoden zu Ihrem Dialog-Quellcode hinzufügen.Diese Lösung hat dieses Problem nicht:
quelle
Anruf
dialog.setCancelable(false);
von Ihrer Aktivität / Fragment.quelle
Folgendes hat bei mir funktioniert:
quelle
Sie können die
background
gesamte Bildschirmgröße belegentransparent
und dasonClick
Ereignis anhörendismiss
.quelle
Hier ist der Code
Probier diese . Sie können die Tastatur ausblenden, wenn Sie draußen berühren
quelle