动态查找菜单项的位置

5

我有一个菜单,其中所有项目的showAsAction设置为ifRoom。 现在,我想获取任何这些菜单项中心的确切位置(x,y)。

我最初想从底层视图获取此信息,但我不知道如何可靠地访问特定菜单项的视图。

onCreateOptionsMenu中:

MenuItem someItem = menu.findItem(R.id.some_action);
// someItem.getX();
// someItem.getY();

我预计这些坐标是相对于应用程序的工具栏的。在这种情况下,我还需要访问 someItem.get{Width,Height}()来计算中心坐标。
一个示例菜单:
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/action_search"
    android:title="@string/action_search"
    android:icon="@drawable/ic_search"
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="ifRoom|collapseActionView" />

<item
    android:id="@+id/action_example"
    android:title="@string/action_example"
    android:icon="@drawable/ic_example"
    app:showAsAction="ifRoom" />

</menu>

尝试使用以下链接提供的代码:https://dev59.com/InLYa4cB1Zd3GeqPVkjg - Junaid Fahad
1个回答

4
解决方案是使用基础活动来查找已实例化的视图。
View menuItemView = getActivity().findViewById(R.id.action_search);

然后,可以使用View.getLocationInWindow(intArr)相对于工具栏提取位置,该方法返回相对于视图窗口的(x,y)坐标。

int[] itemWindowLocation = new int[2];
menuItemView.getLocationInWindow(itemWindowLocation);

int[] toolbarWindowLocation = new int[2];
toolbar.getLocationInWindow(toolbarWindowLocation);

int itemX = itemWindowLocation[0] - toolbarWindowLocation[0];
int itemY = itemWindowLocation[1] - toolbarWindowLocation[1];
int centerX = itemX + menuItemView.getWidth() / 2;
int centerY = itemY + menuItemView.getHeight() / 2;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接