2016-12-07 9 views
2

J'ai une configuration ActionBar dans mon AppCompatActivity et je voudrais beaucoup être en mesure d'obtenir la position des éléments de menu et le menu de débordement, de sorte que je peux avoir une info-bulle pointant vers n'importe quel élément de la barre ActionBar. J'ai essayé de nombreuses façons maintenant, et j'ai un moyen de m'occuper de l'ActionBar et de la barre d'outils, mais il semble que toutes les vues ont toujours une gauche de zéro et ainsi de suite. J'ai créé un composant de pointe d'outil qui est un PopupWindow, et je peux le positionner sur l'ActionBar sans problème, mais je n'arrive pas à comprendre comment obtenir la position correcte des éléments de menu. Y a-t-il un moyen d'y arriver?Puis-je obtenir la position du menu de débordement et de tout autre menu dans la barre d'action?

Merci
Søren

Répondre

0

Vous êtes probablement toujours obtenir un top zéro et la position gauche parce que vous essayez de lire la position avant que la vue est aménagé.

Pour obtenir la position lorsque les points de vue sont mesillés et la disposition, vous devez ViewTreeObserver.

Dans votre onCreate() son activité, vous pouvez faire quelque chose comme ceci:.

toolbar.getViewTreeObserver().addOnPreDrawListener(
     new ViewTreeObserver.OnPreDrawListener() { 
      @Override 
      public boolean onPreDraw() { 
       toolbar.getViewTreeObserver().removeOnPreDrawListener(this); 

       // here you can get the real position of each menu item and position your Popup 
       return true; 
      } 
     }); 
+0

Oui presque ... Maintenant, le toolbar.getOverflowIcon() getBounds() a une largeur et la hauteur, mais sa position est 0, 0 Maintenant, cela peut sembler logique, car il est probablement aligné à droite, mais il y a aussi une marge ou un bourrage qui entre en jeu, et je ne trouve nulle part où obtenir ces valeurs. J'ai vu d'autres placer des astuces qui pointent vers un élément de menu, mais comment obtiennent-ils la position? – Neigaard

+1

La position d'une vue est toujours relative à son parent. Votre icône est probablement située dans un conteneur à l'intérieur de la barre d'outils. Vous voulez utiliser 'getLocationOnScreen()' et/ou 'getLocationInWindow()' pour obtenir la position absolue de la vue à l'écran. – pdegand59