Ich bin im Dialog Dialog implementieren und ich möchte mein Dialogfeld nicht geschlossen werden, wenn der Benutzer außerhalb des Dialogfelds klicken, aber ich möchte Ereignisse von außen der Dialog, wenn der Dialog angezeigt wird.Wie bekomme ich einen Klick außerhalb des Dialogfelds, auch wenn setCanceledOnTouchOutside (boolean) auf false gesetzt ist
Antwort
Überschreiben Sie onTouchEvent() des Dialogfelds und überprüfen Sie den Aktionstyp. Wenn der Aktionstyp MotionEvent.ACTION_OUTSIDE
ist, bedeutet dies, dass der Benutzer außerhalb der Dialogregion interagiert. Also in diesem Fall können Sie Ihr Dialogfeld schließen oder entscheiden, was Sie ausführen wollten:
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("Touched outside the dialog");
}
return false;
}
Wenn Sie überprüfen wollen, ob die Berührung außerhalb des Dialogs oder Blick passiert, haben Sie DispatchTouchEvent()
in der Aktivität außer Kraft zu setzen und checke diese Methode ein. Wie:
eine Schnittstelle Erstellen Sie die Touchoutside wie unten auslösen:
/**
* Interface definition for a callback to be invoked when a touch event has occurred outside a formerly specified view.
* See {@link #setOnTouchOutsideViewListener(View, OnTouchOutsideViewListener)}
*/
public interface OnTouchOutsideViewListener {
/**
* Called when a touch event has occurred outside a given view.
*
* @param view The view that has not been touched.
* @param event The MotionEvent object containing full information about the event.
*/
void onTouchOutside(View view, MotionEvent event);
}
Angenommen, wenn Sie Basis Aktivität haben, können Sie den gesamten Code in sie setzen, sonst verwenden Sie es in Tätigkeit.
Override dispatchTouchEvent()
, die für alle Berührung ausgelöst wird, passiert auf dem Bildschirm. Hier werden wir die berührten x und y auf dem Bildschirm bekommen, so müssen Sie die Ansichten x und y bekommen und prüfen, ob dieser Punkt in Reichweite ist.
@Override
public boolean dispatchTouchEvent(final MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// Notify touch outside listener if user tapped outside a given view
if (mOnTouchOutsideViewListener != null && mTouchOutsideView != null
&& mTouchOutsideView.getVisibility() == View.VISIBLE) {
Rect viewRect = new Rect();
mTouchOutsideView.getGlobalVisibleRect(viewRect);
if (!viewRect.contains((int) ev.getRawX(), (int) ev.getRawY())) {
mOnTouchOutsideViewListener.onTouchOutside(mTouchOutsideView, ev);
return false;
}
}
}
return super.dispatchTouchEvent(ev);
}
Für Touch außerhalb Hörer einstellen und ihn zu entfernen, wie unten in der Aktivität Methoden erstellen:
/**
* Sets a listener that is being notified when the user has tapped outside a given view. To remove the listener,
* call {@link #removeOnTouchOutsideViewListener()}.
* <p/>
* This is useful in scenarios where a view is in edit mode and when the user taps outside the edit mode shall be
* stopped.
*
* @param view
* @param onTouchOutsideViewListener
*/
public void setOnTouchOutsideViewListener(View view, OnTouchOutsideViewListener onTouchOutsideViewListener) {
mTouchOutsideView = view;
mOnTouchOutsideViewListener = onTouchOutsideViewListener;
}
public void removeOnTouchOutsideViewListener() {
mTouchOutsideView = null;
mOnTouchOutsideViewListener = null;
}
Also endlich, was Sie tun sollten ist, um den obersten übergeordneten Ansicht passieren die setOnTouchOutsideViewListener()
in onCreate()
von activity.In Ihrem Fall nach dialog.show()
, Übergeben Sie Dialoge übergeordnete Layout. Wie:
View detectTouchOutsideThisView = findViewById(R.id.parent_view);
setOnTouchOutsideViewListener(detectTouchOutsideThisView, new OnTouchOutsideViewListener() {
void onTouchOutside(View view, MotionEvent event) {
//If touch outside this will be triggered
}
});
danke akhay es hat sehr geholfen –
- 1. setCanceledOnTouchOutside funktioniert nicht, wenn ich auf außerhalb
- 2. Schaltfläche klicken außerhalb des Dialogfelds
- 3. Wie bekomme ich Klick-Ereignis des Markierungstextes
- 4. Wie bekomme ich meinen Knoten zu drehen, auch wenn mein Finger außerhalb des Knotens ist?
- 5. Visual Basic: Radio-Taste ist sichtbar, auch wenn ich es auf sichtbar gesetzt = false
- 6. So entfernen Sie einen transparenten dunklen Hintergrund außerhalb des Dialogfelds
- 7. Mauszeiger wird nicht in Monogame in Windows versteckt, auch wenn IsMouseVisible auf false gesetzt ist
- 8. Android Studio erzeugt R-T-L Ressourcendateien auch wenn supportRtl auf false gesetzt ist
- 9. Boolean! = False
- 10. Identitätsspezifikation auf "false" gesetzt
- 11. TextView Klick auf Link, wenn autoLink auf "web" gesetzt ist
- 12. jQuery Akkordeon bricht nach dem ersten Klick wenn aktiv: false ist gesetzt
- 13. always_use_default_target_path funktioniert nicht, wenn auf false gesetzt
- 14. Winkelmesser Zeitüberschreitung nur, wenn ignoreSynchronization auf false gesetzt ist
- 15. grails: Daten gespeichert, auch wenn ich einen Fehler gesetzt
- 16. Formular Auch wenn ich ein „return false“
- 17. View helper: classBinding if boolean ist false
- 18. Wie erkennt man, wenn Benutzer außerhalb des Dialogfragments berühren?
- 19. Verkabeln des Ereignisses Page_PreInit manuell, wenn AutoEventWireup auf false gesetzt ist
- 20. Prüfen ob Javascript Boolean gesetzt ist?
- 21. Bootstrap Popover auf Tabellenzeile wird nicht abgelehnt, auch wenn 'Trigger' auf 'Fokus' gesetzt ist
- 22. div auf einen Klick anzeigen/ausblenden, wenn außerhalb des div geklickt
- 23. Wie erkenne ich einen Klick außerhalb meines Popup-Fensters?
- 24. Warum ist `typeof false || undefined` returns "boolean"
- 25. wie Zugriff auf aws Zugangsschlüssel außerhalb des Codes auch außerhalb des Servers
- 26. Boolean.FALSE oder neu Boolean (false)?
- 27. Wie bekomme ich Java boolean in Javascript?
- 28. Bootstrap Dropdown-Menü: nicht schließen, wenn Klick außerhalb des Menüs
- 29. Vergleichsoperator mit boolean false
- 30. Erhalten Sie unbehandelt Versprechen Fehler, aber wenn ich fange ich bekomme Typ boolean ist nicht zuweisbar
Verwenden Sie normalen Dialog oder eine Aktivität als Dialog! – shadygoneinsane