En évitant PopupWindow licenciement après avoir touché à l'extérieur
Je voudrais utiliser un PopupWindow avec les comportements suivants/caractéristiques:
- Il peut recevoir le focus (a des contrôles à l'intérieur par exemple. les boutons)
- La Vue 'de la rubrique' popupwindow a consommer de la touche à l'extérieur de la popup correctement
- .. mais le popupwindow doit rester sur l'écran, même après un clic en dehors de
J'ai trouvé des tas de posts concernant PopupWindow mais aucun d'entre eux demandé la question de savoir comment faire face à une telle situation..
Je pense que j'ai essayé toutes les combinaisons possibles de setOutsideTouchable(), setFocusable(),setTouchable() mais je suis coincé. Popup traite de clics sur il le faut, mais elle disparaît toujours au toucher et à l'extérieur.
Mon code actuel est :
View.OnTouchListener customPopUpTouchListenr = new View.OnTouchListener(){
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
Log.d("POPUP", "Touch false");
return false;
}
};
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout= (LinearLayout)inflater.inflate(R.layout.insert_point_dialog, null);
PopupWindow pw = new PopupWindow(layout,400,200,true);
pw.setOutsideTouchable(true);
pw.setTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.setTouchInterceptor(customPopUpTouchListenr);
pw.showAtLocation(frameLayout, Gravity.BOTTOM, 0, 0);
Mon but est de créer une fenêtre flottante qui se comporte comme une "boîte à outils" dans un logiciel comme gimp: a certains contrôles à l'intérieur, reste en haut, jusqu'à la fermeture par bouton 'X', et permettant d'interagir avec les contrôles à l'extérieur-dessous..
Peut-être il ya une meilleure façon de le faire, pas un PopupWindow? Mais je n'ai pas encore trouvé plus convenable de contrôle.
OriginalL'auteur Michał Wróbel | 2012-05-02
Vous devez vous connecter pour publier un commentaire.
c'est trop tard mais pour les gens qui google ce genre de choses
il suffit de changer l'ordre des lignes
au lieu de
rien mettre après showatlocation méthode fait comme si de rien n'
OriginalL'auteur Haytham Osama
Juste enlever
pw.setBackgroundDrawable(new BitmapDrawable());
OriginalL'auteur Raaga
pw.setOutsideTouchable(false);
OriginalL'auteur Venkata Krishna
Solution est:
popupWindow.setFocusable(true);
popupWindow.mise à jour();
Grâce à:
http://android-er.blogspot.ch/2012/04/disable-outside-popupwindow-by.html
OriginalL'auteur LCoelho
Essayer
OriginalL'auteur Johnny Doe
Tout d'abord, vous devez comprendre que c'est pourquoi le popupWindow est rejetée lorsque vous touchez à l'extérieur.
Après avoir lu le code source de PopupWindow et le fichier de ressources styles.xml,
Donc il n'y a rien de tel que le dialogue thème:
Mais Somethings se produire lorsque PopupWindow.setBackgroundDrawable() est appelée,
Un conteneur view "PopupViewContainer" est créé.
}
Maintenant vous savez la raison pour laquelle les questions.
Il y a donc deux façons dont vous pouvez éviter PopupWindow licenciement après avoir touché à l'extérieur.
1.tout comme @Raaga fait. supprimer pw.setBackgroundDrawable(nouveau BitmapDrawable());
OriginalL'auteur user2297951