2016-12-07 23 views
2

我的AppCompatActivity中有一个ActionBar安装程序,我非常想获取菜单项和溢出菜单的位置,这样我可以有一个工具提示指向ActionBar中的任何项目。我现在已经尝试了很多方法,并且我确实有办法让ActionBar和工具栏保持不变,但是似乎任何视图总是有一个零,等等。我创建了一个工具提示组件,它是一个PopupWindow,我可以将它置于ActionBar上没问题,但我无法弄清楚如何获取菜单项的正确位置。有没有办法呢?我可以得到溢出菜单和操作栏中的任何其他菜单的位置

谢谢
瑟伦

回答

0

你可能总是得到一个零顶部和左侧位置,因为你正在尝试读取的位置来看铺设之前。

要获得测量视图和布局时的位置,您必须ViewTreeObserver

在你活动的onCreate(),你可以做这样的事情:

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

是几乎...现在toolbar.getOverflowIcon()的getBounds()具有宽度和高度,但它的位置为0, 0。现在这可能是有道理的,因为它可能是对齐的,但也有一些边际或填充也起作用,并且我无法找到任何地方来获取这些值。我看到其他人提供了指向菜单项的工具提示,但他们如何获得位置? – Neigaard

+1

视图的位置始终相对于其父项。您的图标可能位于工具栏内的容器中。你想使用'getLocationOnScreen()'和/或'getLocationInWindow()'来获得屏幕上视图的绝对位置。 – pdegand59