Ich habe eine Aktivität, die den Theme.Dialog-Stil verwendet, sodass es sich um ein schwebendes Fenster über einer anderen Aktivität handelt. Wenn ich jedoch außerhalb des Dialogfensters (auf die Hintergrundaktivität) klicke, wird das Dialogfeld geschlossen. Wie kann ich dieses Verhalten stoppen?
228
Antworten:
Dies könnte Ihnen helfen. Es ist eine Möglichkeit, die Berührung außerhalb des Ereignisses zu handhaben:
Wie kann ich einen Dialog mit dem Thema Aktivität abbrechen, wenn ich ihn außerhalb des Fensters berühre?
Ich denke, Sie können das Schließen verhindern, indem Sie das Ereignis einfangen und nichts tun. Was jedoch seltsam ist, ist, dass das Standardverhalten Ihres Aktivitätsdialogs nicht darin bestehen sollte, sich selbst zu schließen, wenn Sie nach draußen berühren.
(PS: Der Code verwendet WindowManager.LayoutParams)
quelle
Verwenden Sie diese Option, um zu verhindern, dass das Dialogfeld beim Drücken der Zurück-Taste geschlossen wird
Verwenden Sie diese Option, um zu verhindern, dass das Dialogfeld bei Berührung von außen geschlossen wird
quelle
AlertDialog
bei Berührung im Freien geschlossen wird, und genau das bietet diese Antwort.setCancelable(false)
Was Sie tatsächlich haben, ist eine Aktivität (auch wenn sie wie ein Dialog aussieht). Daher sollten Sie
setFinishOnTouchOutside(false)
von Ihrer Aktivität aus anrufen, wenn Sie sie beim Klicken auf die Hintergrundaktivität geöffnet lassen möchten.BEARBEITEN: Dies funktioniert nur mit Android API Level 11 oder höher
quelle
onBackPressed()
, nichts in seinem Körper zu tunWas für mich funktioniert hat, war,
DialogFragment
ein Set zu erstellen , das nicht stornierbar ist:quelle
Wenn Sie den Dialog als Aktivität in onCreate verwenden, fügen Sie dies hinzu
quelle
Bei einer höheren API 10 verschwindet der Dialog, wenn er außerhalb berührt wird, während bei einer niedrigeren als API 11 der Dialog nicht verschwindet. Um dies zu verhindern, müssen Sie Folgendes tun:
In
styles.xml
:<item name="android:windowCloseOnTouchOutside">false</item>
ODER
onCreate()
Verwenden Sie in der Methode:this.setFinishOnTouchOutside(false);
Hinweis: Für API 10 und niedriger hat diese Methode keine Wirkung und wird nicht benötigt.
quelle
Es reicht aus, das Dialogfeld abzubrechen auf "falsch" zu setzen. Wenn Sie entweder außerhalb des Warnungsdialogs berühren oder auf die Schaltfläche "Zurück" klicken, wird das Warnungsdialogfeld ausgeblendet. Also benutze dieses:
setCancelable(false)
Und die andere Funktion ist nicht mehr notwendig:
dialog.setCanceledOnTouchOutside(false);
Wenn Sie einen temporären Dialog erstellen und sich fragen, ob Sie diese Codezeile einfügen möchten, finden Sie hier ein Beispiel:
quelle
Verwenden Sie diesen Code, der für mich funktioniert
quelle
Weitere Informationen zum Dialog finden Sie unter diesem Link .
quelle
Einfach,
Verhindern, dass der Benutzer außerhalb des Dialogfelds klickt.
quelle
Der Warnungsdialog ist veraltet. Verwenden Sie daher Dialog dialog = new Dialog (this);
Zur Vermeidung von Berührungen von außen
quelle
Verwenden Sie
setFinishOnTouchOutside(false)
für API> 11 und machen Sie sich keine Sorgen, da das Standardverhalten des Android, dass der Dialog zum Thema Aktivität bei API <11 nicht von außen ausgeführt wird, nicht beendet wird :) !! Prost !!quelle
Ich benutze dies in onCreate (), scheint auf jeder Version von Android zu funktionieren; Auf 5.0 und 4.4.x getestet, kann nicht auf Gingerbread getestet werden. Samsung-Geräte (Hinweis 1 mit GB) haben dies standardmäßig folgendermaßen:
quelle
Ich denke, das wird dir helfen. Es hat bei mir funktioniert
quelle
Hier ist meine Lösung:
quelle
Es ist auch möglich, verschiedene Aktionen zuzuweisen, die onCancelListener implementieren:
quelle
Ich hatte das gleiche Problem. Um damit umzugehen, setze ich ein
OntouchListener
auf den Dialog und mache nichts drinnen. Der Dialog wird jedoch auch beim Drehen des Bildschirms geschlossen. Um dies zu beheben, habe ich eine Variable festgelegt, die mir mitteilt, ob der Dialog normalerweise geschlossen wurde. Dann setze ich einOnDismissListener
auf meinen Dialog und überprüfe darin die Variable. Wenn der Dialog normalerweise deaktiviert wurde, tue ich nichts, oder ich führe den Dialog erneut aus (und setze seinen Status wie beim Entlassen in meinem Fall).quelle
builder.setCancelable (false);
public void Mensaje (Ansicht v) {
quelle
Dies ist die perfekte Antwort auf alle Ihre Fragen .... Ich hoffe, Sie genießen das Codieren in Android
quelle