J'ai quelques popups sur mon application, c'est plein écran et le code suivant:
content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
content.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int screenWidth = windowManager.getDefaultDisplay().getWidth();
int screenHeight = windowManager.getDefaultDisplay().getHeight();
int x = screenWidth / 2 - content.getMeasuredWidth() / 2;
int y = screenHeight / 2 - content.getMeasuredHeight() / 2;
window.showAtLocation(content, Gravity.NO_GRAVITY, x, y);
Centrez la fenêtre.
Mais j'ai une autre activité qui n'est pas en plein écran, lorsque la fenêtre contextuelle s'ouvre, elle est à droite de l'endroit où elle doit être.
En essayant de comprendre pourquoi cela se produit, je pense que showAtLocation montre que c'est par rapport à l'activité en cours, mais je dois le montrer par rapport à l'affichage.
Comment puis je faire ça? Ou y a-t-il un moyen plus simple de simplement centrer la fenêtre contextuelle?
popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0);
Cela centrera votre vue.
Il m'a fallu 2 heures de douleur pour comprendre cela. Je n'avais pas besoin de maths de magie noire pour gérer ça.
La vue n'est nécessaire que pour le jeton de fenêtre, elle n'a aucun autre impact sur l'emplacement.
Gravity indique au gestionnaire de disposition où commencer le système de coordonnées et comment traiter ces coordonnées. Je ne trouve pas les documents mais le piratage me montre que:
J'ai écrit ceci ici Android PopupWindow.showAtLocation () et les effets de la gravité
View popupView = layoutInflater.inflate(R.layout.index_popviewxml,
null);
final PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, true);
popupWindow.setTouchable(true);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);