Deinstallieren Sie DialogFragment (nicht Dialog) onTouchOutside

Ich habe alle Antworten über die Entlassung eines Dialogs aufTouchOutside durchsucht , aber ich benutze DialogFragment in meiner Anwendung. Wie kann ich das DialogFragment entlassen, wenn der Benutzer außerhalb der DialogFragment- Region klickt.

Ich habe den Quellcode von dialog für setCanceledOnTouchOutside untersucht

  • Die Methode getSystemService (String) ist undefined für den Typ Listen
  • Android: StaggeredGridLayoutManager scrollen nach oben bei der Initialisierung
  • Javax.net.ssl.SSLException: Verbindung geschlossen durch Peer auf 4.4.2 Gerät (arbeitet am 6.0.1)
  • Wie sieht Transfuse mit Dolch aus?
  • Android HttpClient Leistung
  • Programmieren Sie PPTP / L2TP VPN in Android programmgesteuert
  • public void setCanceledOnTouchOutside(boolean cancel) { if (cancel && !mCancelable) { mCancelable = true; } mCanceledOnTouchOutside = cancel; } 

    Es gibt eine andere Funktion, die interessant sein kann, was isOutOfBounds ist

     private boolean isOutOfBounds(MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final int slop = ViewConfiguration.get(mContext).getScaledWindowTouchSlop(); final View decorView = getWindow().getDecorView(); return (x < -slop) || (y < -slop) || (x > (decorView.getWidth()+slop)) || (y > (decorView.getHeight()+slop)); } 

    Aber ich konnte nicht herausfinden, einen Weg, um diese für DialogFragment nutzen

    Darüber hinaus habe ich den Zustand der Anwendung mit Hierarchieviewer untersucht und wie ich es verstehe, kann ich nur die Region des Dialogs sehen und nicht den ausgelagerten Teil davon (ich meine den verbleibenden Teil des Bildschirms nach dem DialogFragment ).

    Können Sie vorschlagen, eine Möglichkeit zur Implementierung dieses setCanceledOnTouchOutside für DialogFragment und wenn möglich mit einem Beispielcode?

  • Kann keine externe Dateien Dir in Android erstellen. WRITE_EXTERNAL_STORAGE ist vorhanden
  • Wie können Sie diese Buggy native Crop Box in einer Hybrid-App bewegen?
  • Verwenden von FFmpeg mit Android-NDK
  • Zählen Sie die Anzahl der Tabellen in der sqlite-Datenbank
  • Beim Zwischenspeichern von Bildern und Daten sollten Sie interne oder externe Speicher verwenden?
  • RadioButton nicht korrekt zeichnen
  • 5 Solutions collect form web for “Deinstallieren Sie DialogFragment (nicht Dialog) onTouchOutside”

    Die Antwort ist ganz einfach:

     MyDialogFragment fragment = new MyDialogFragment(); // init in onCreate() or somewhere else ... if ( fragment.getDialog() != null ) fragment.getDialog().setCanceledOnTouchOutside(true); // after fragment has already dialog, ie in onCreateView() 

    Weitere Informationen zu Dialogen in DialogFragments finden Sie unter http://developer.android.com/reference/android/app/DialogFragment.html#setShowsDialog%28boolean%29 .

    In den meisten Fällen ist getDialog () null, da du es nicht sofort bekommst, nachdem du eine neue Instanz deines Dialogs gemacht hast.

    Wie oben onViewCreated ist onViewCreated auch noch nicht für DialogFragment allem bei der Verwendung von android.support.v4.app.DialogFragment .

    Die unten funktioniert gut, wie es auf der onCreateView :

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (getDialog() != null) { getDialog().setCanceledOnTouchOutside(true); } return super.onCreateView(inflater, container, savedInstanceState); } 

    Warum nicht nur onCreateDialog überschreiben und einfach dort einstellen. Auf diese Weise müssen Sie nicht auf null auf dem getDialog() Aufruf die ganze Zeit zu überprüfen.

      @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog d = super.onCreateDialog(savedInstanceState); d.setCanceledOnTouchOutside(false); return d; } 

    Ich las: http://developer.android.com/reference/android/app/DialogFragment.html

    Es heißt: "Die Kontrolle über den Dialog (die Entscheidung, wann zu zeigen, zu verbergen, zu entlassen) sollte über die API hier geschehen, nicht mit direkten Anrufen auf den Dialog."

    Ich habe auf eine andere Frage geantwortet, aber diese Antwort ist für dieses Problem besser geeignet, meine Lösung . Nur um hier kurz zu onTouch() , habe ich einfach onTouch() von DialogFragment 's getView() und überprüfte Touch-Grenzen implementiert.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.