Ich habe ein PopupWindow für meine Aktivität. Mein PopupWindow wird auch dann noch angezeigt, wenn ich mit meiner Aktivität interagiere (z. B. Scrollen in meiner Liste). Ich kann durch meine Liste scrollen und das PopupWindow ist immer noch da.
Was ich erreichen möchte, ist, wenn ich auf dem Bildschirm, der nicht das PopupWindow ist, berühre / scrolle / klicke / usw., möchte ich das PopupWindow schließen. Genau wie ein Menü funktioniert. Wenn Sie außerhalb des Menüs geklickt haben, wird das Menü geschlossen.
Ich habe es versucht, setOutsideTouchable(true)
aber es wird das Fenster nicht schließen. Vielen Dank.
android
popupwindow
android-menu
Dorfbewohner
quelle
quelle
BitmapDrawable()
ist beraubt. Verwenden SieColorDrawable()
stattdessen.Ich stellte fest, dass keine der Antworten für mich funktionierte, außer WareNinjas Kommentar zur akzeptierten Antwort, und Marcin S. wird wahrscheinlich auch funktionieren. Hier ist der Teil, der für mich funktioniert:
Alternative:
Ich bin mir nicht sicher, was die Unterschiede sind, aber der ListPopupWindow-Quellcode verwendet letzteres tatsächlich, wenn seine Modalität mit setModal auf true gesetzt ist. Zumindest die Android-Entwickler halten dies für einen praktikablen Ansatz, und es ist nur eine Zeile.
quelle
setFocusable
müssen wir zweimal auf die Schaltfläche klicken (wobei die Schaltfläche außerhalb des Popups platziert ist), wo sie wie bei der ersten Methode einwandfrei funktioniert :)BitmapDrawable()
ist beraubt. Verwenden SieColorDrawable()
stattdessen.Ich habe die gleichen Probleme festgestellt und sie wie unten beschrieben behoben. Es funktioniert gut für mich.
Übrigens, verwenden Sie keinen veralteten BitmapDrawable-Konstruktor. Verwenden Sie dieses neue ColorDrawable (android.R.color.transparent) , um den Standardhintergrund zu ersetzen.
Habe Spaß@.@
quelle
Ich weiß, dass es spät ist, aber ich stelle fest, dass die Leute immer noch ein Problem mit dem Popup-Fenster haben. Ich habe beschlossen, ein voll funktionsfähiges Beispiel zu schreiben, in dem Sie das Popup-Fenster schließen können, indem Sie es berühren oder darauf klicken oder einfach das Fenster selbst berühren. Erstellen Sie dazu eine neue PopupWindow-Klasse und kopieren Sie diesen Code:
PopupWindow.class
Erstellen Sie nun das Layout für das Popup-Fenster: popup.xml
Erstellen Sie in Ihrer Hauptaktivität eine Instanz der PopupWindow-Klasse:
Dabei ist YOUR_MAIN_LAYOUT das Layout der aktuellen Aktivität, in der popupWindow angezeigt wird
quelle
Vielen Dank für die Antwort von @ LunaKong und die Bestätigung von @ HourGlass. Ich möchte keinen doppelten Kommentar abgeben, sondern nur klar und prägnant.
Mttdat.
quelle
Für ein
ListPopupWindow
Set ist das Fenster modal, wenn es angezeigt wird.Auf diese Weise wird es durch Klicken außerhalb von geschlossen
ListPopupWindow
.quelle
mListPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
verhindern, dass das Popup-Fenster die Bildschirmtastatur beeinträchtigt.Beachten Sie, dass Sie zum Abbrechen mit
popupWindow.setOutsideTouchable(true)
Breite und Höhewrap_content
wie folgt festlegen müssen:quelle
Das PopupWindow wird beim Klicken / Berühren auf dem Bildschirm geschlossen. Stellen Sie vor showAtLocation sicher, dass Sie focusable true festgelegt haben.
quelle
Sie können
isOutsideTouchable
OR verwendenisFocusable
, um das Popup-Fenster zu schließen, wenn Sie außerhalb berührenHinweis
Derzeit hilft uns nach dem Test
setBackgroundDrawable
nicht , das Popup-Fenster zu schließenWenn Sie sich den Code für die Entlassung in
PopupWindow
(PopupWindow->PopupDecorView->dispatchKeyEvent
undPopupWindow->PopupDecorView->onTouchEvent
) ansehen . Sie werden sehen, dass sie beim Drücken der Zurück-Taste amACTION_UP
und bei Berührung außerhalb amACTION_UP
oder am entlassen werdenACTION_OUTSIDE
quelle
@ LunaKong Vorschlag Arbeit ist wie ein Zauber.
Aber mPopupWindow.setFocusable einrichten (false). Entfernt unnötige Berührungen, die erforderlich sind, um das Popup-Fenster verschwinden zu lassen.
Beispiel: Angenommen, auf dem Bildschirm wird ein Popup-Fenster angezeigt, und Sie klicken auf eine Schaltfläche. In diesem Fall wird Popup-Fenster (wenn mpopwindow.setFocusable (true)) beim ersten Klicken auf eine Schaltfläche geschlossen. Sie müssen jedoch erneut klicken, damit die Schaltfläche funktioniert. if ** (mpopwindwo.setFocusable (false) ** einmaliger Klick auf die Schaltfläche schließt das Popup-Fenster und löst den Klick auf die Schaltfläche aus. Ich hoffe, es hilft.
quelle
quelle
Stellen Sie den Fensterhintergrund transparent ein:
Danach legen Sie Ihren Hintergrund im Layout fest. Funktioniert gut.
quelle
In einigen Fällen ist es nicht wünschenswert, das Popup fokussierbar zu machen (z. B. möchten Sie möglicherweise nicht, dass es den Fokus aus einer anderen Ansicht stiehlt).
Ein alternativer Ansatz ist die Verwendung eines Touch Interceptors:
quelle
Verwenden Sie View popupView, um das popupWindow zu schließen
`Wenn Sie dies verwenden, können Sie OnClickListener auch auf eine beliebige Schaltfläche im Popup-Fenster setzen
quelle