PopupWindow - Rejeter lors d'un clic à l'extérieur
J'ai un PopupWindow sur mon activité, le truc, c'est mon PopupWindow affiche toujours, même quand je suis en interaction avec mon activité (dire défilement sur ma liste). Je peux faire défiler ma liste et la PopupWindow est toujours là.
Ce que je veux réaliser c'est quand je suis toucher/défilement/clic/etc sur l'écran qui n'est pas le PopupWindow, je veux rejeter la PopupWindow. Juste comme la façon dont un menu fonctionne. Si vous avez cliqué sur l'extérieur du menu, le menu sera rejeté.
J'ai essayé setOutsideTouchable(true)
mais il ne rejette pas la fenêtre. Merci.
InformationsquelleAutor lorraine | 2012-09-02
Vous devez vous connecter pour publier un commentaire.
S'il vous plaît essayer de définir
setBackgroundDrawable
surPopupWindow
qui doit fermer la fenêtre si vous touchez à l'extérieur de l'il.ColorDrawable()
à la place.J'ai constaté qu'aucune des réponses fournies travaillé pour moi, sauf WareNinja commentaire de la accepté de répondre, et Marcin S. le sera probablement aussi de travail. Voici la partie qui fonctionne pour moi:
Sinon:
Pas sûr de ce que les différences sont, mais le ListPopupWindow code source utilise en fait le second, quand c'est la modalité est définie à true avec setModal, donc au moins les développeurs Android estimons que c'est une approche viable, et c'est une seule ligne.
setFocusable
, nous avons besoin de cliquer sur le bouton deux fois (lorsque le bouton est placé à l'extérieur de la pop-up) où, comme dans la méthode 1, il fonctionne très bien 🙂BitmapDrawable()
est depricated. UtilisationColorDrawable()
à la place.J'ai rencontré les mêmes problèmes, et il fixe aussi ci-dessous des codes. Il fonctionne très bien pour moi.
BTW, Ne pas utiliser de BitmapDrawable obsolète constructeur, utilisez ce nouveau ColorDrawable(android.R.couleur.transparent) pour remplacer l'arrière-plan par défaut.
Avoir du plaisir@.@
Je sais il est tard mais j'ai remarqué que les gens ont encore un problème avec la fenêtre pop-up. J'ai décidé d'écrire un travail entièrement exemple où vous pouvez fermer la fenêtre pop-up en touchant ou en cliquant en dehors de lui ou juste toucher la fenêtre elle-même. Pour se faire, créez un nouveau PopupWindow classe et copiez ce code:
PopupWindow.class
Maintenant créer la mise en page de la fenêtre pop-up:
popup.xml
Dans votre activité principale créer une instance de la PopupWindow classe:
où YOUR_MAIN_LAYOUT est la mise en page de l'activité actuelle dans laquelle popupWindow pop up
Merci pour @LunaKong la réponse de @Sablier de confirmation. Je ne veux pas faire un double commentaire, mais qui ne veulent pas la rendre claire et concise.
Mttdat.
Avis que, pour l'annulation de avec
popupWindow.setOutsideTouchable(true)
,vous avez besoin de faire de la largeur et de la hauteur
wrap_content
comme le code ci-dessous:Pour un
ListPopupWindow
définir la fenêtre modale lorsque indiqué.De cette façon, en cliquant à l'extérieur de la
ListPopupWindow
sera rejetée.La fenêtre arrière-plan transparent:
Après avoir défini votre arrière-plan dans la mise en page. Fonctionne très bien.
@LunaKong suggestion du travail comme un charme.
Mais la mise en mPopupWindow.setFocusable(false). supprime inutilement la touche nécessaire pour rendre la fenêtre popup disparaître.
Par exemple:
Considérons il y a une fenêtre visible sur l'écran, et vous êtes sur le point de cliquer sur un bouton.
Donc dans ce cas, (si mpopwindow.setFocusable(true))
sur le premier clic d'un bouton popupwindow rejettera.
Mais vous devez cliquer à nouveau pour faire le bouton fonctionne.
si**(mpopwindwo.setFocusable(false)**
seul clic de bouton rejeter la fenêtre pop-up ainsi que de déclencher le clic sur le bouton.
Espérons que cela aide.
Il rejettera la PopupWindow lors d'un clic/le toucher sur l'écran.Assurez-vous que vous avez défini focusable vrai avant showAtLocation.
Dans certains cas, faire de la popup peut recevoir le focus n'est pas souhaitable (par exemple, vous ne voulez pas à voler le focus d'un autre point de vue).
Une approche alternative est d'utiliser une touche intercepteur:
Utilisation voir popupView de rejeter la popupWindow
`
Si vous utilisez cette option, vous pouvez également setOnClickListener à n'importe quel bouton à l'intérieur de la popupWindow