如何获取操作栏中图标的坐标?

How to access to the coordinates of the icons in the action bar?

在我的应用程序教程中,我希望能够指向操作栏中的特定图标,例如下图中黄色箭头指向灯泡:

这里是图片中显示的菜单项的 XML 代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">

<item
    android:id="@+id/AbErase"
    android:icon="@android:drawable/ic_delete"
    android:orderInCategory="10"
    android:title="@string/Erase"
    android:tooltipText="@string/Erase"
    app:showAsAction="ifRoom|collapseActionView"
    />

<item android:id="@+id/AbImmediateImplementation"
    android:title="@string/ImmediateImplementation"
    android:checkable="true"
    android:orderInCategory="20"
    app:showAsAction="never|withText"
    android:enabled="true" />

<item android:id="@+id/AbSuggest"
    android:title="@string/Suggest"
    android:tooltipText="@string/Suggest"
    android:icon="@drawable/ic_lightbulb_outline_white_48dp"
    android:orderInCategory="50"
    app:showAsAction="ifRoom|collapseActionView" />

<item android:id="@+id/AbUndo"
    android:title="@string/ActionBarUndo"
    android:tooltipText="@string/ActionBarUndo"
    android:icon="@android:drawable/ic_menu_revert"
    android:orderInCategory="51"
    app:showAsAction="ifRoom|collapseActionView" />

<item android:id="@+id/AbStep"
    android:title="@string/ActionBarStep"
    android:icon="@drawable/ic_play_arrow_white_24dp"
    android:orderInCategory="100"
    app:showAsAction="ifRoom|collapseActionView" />

.....
</menu>

这是我用来获取与 AbErase 菜单项关联的 View 的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; mContext adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);

    actionBar.collapseActionView();

    eraseItem = menu.findItem(id.AbErase);
    View eraseItemView = eraseItem.getActionView();
    int eraseItemViewLeft = eraseItemView.getLeft();

    return super.onCreateOptionsMenu(menu);
}

执行此代码时,eraseItemViewnull。 如何获取菜单中每个图标的 Left 坐标?

最后通过调试器,发现上面显示的ToolBar有3个children:

  • 在索引 0:一个 ActionMenuView
  • 在索引 1:包含 Spinner
  • Linearlayout
  • 在索引 2 处:AppCompatImageButton 导航按钮

ActionMenuView 有 5 个 children 类型 ActionMenuItemView。这些是我一直在寻找的图标。

所以要指向第二个图标的 bottom-left 角,我使用此代码:

    ViewGroup overflowMenu = (ViewGroup) scToolbar.getChildAt(0);
    int bulbLeft = overflowMenu.getLeft() + overflowMenu.getChildAt(1).getLeft();