【问题标题】:Can I get the position of the overflow menu and any other menu in the Action Bar我可以在操作栏中获取溢出菜单和任何其他菜单的位置吗
【发布时间】:2016-12-07 14:31:16
【问题描述】:

我在 AppCompatActivity 中有一个 ActionBar 设置,我非常希望能够获得菜单项和溢出菜单的位置,这样我就可以有一个指向 ActionBar 中任何项目的工具提示。我现在已经尝试了很多方法,并且我确实有办法抓住 ActionBar 和 Toolbar,但似乎那里的任何视图总是有零的左边等等。我创建了一个工具提示组件,它是一个 PopupWindow,我可以将它放置在 ActionBar 上没问题,但我不知道如何获得菜单项的正确位置。有办法吗?

谢谢
索伦

【问题讨论】:

    标签: android android-actionbar-compat


    【解决方案1】:

    你可能总是得到一个零顶部和左侧位置,因为你试图在视图布局之前读取位置。

    要获得视图测量和布局时的位置,您必须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;
                }
            });
    

    【讨论】:

    • 是的,差不多... 现在toolbar.getOverflowIcon().getBounds() 有一个宽度和高度,但它的位置是0,0。现在这可能是有道理的,因为它可能是右对齐的,但是也有一些边距或填充起作用,我找不到任何地方来获取这些值。我看到其他人放置指向菜单项的工具提示,但是他们如何获得位置??
    • View 的位置总是相对于它的父级。您的图标可能位于工具栏内的容器中。您想使用getLocationOnScreen() 和/或getLocationInWindow() 来获取屏幕上视图的绝对位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多