如何获取操作栏中图标的坐标?
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);
}
执行此代码时,eraseItemView 为 null。
如何获取菜单中每个图标的 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();
在我的应用程序教程中,我希望能够指向操作栏中的特定图标,例如下图中黄色箭头指向灯泡:
这里是图片中显示的菜单项的 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);
}
执行此代码时,eraseItemView 为 null。 如何获取菜单中每个图标的 Left 坐标?
最后通过调试器,发现上面显示的ToolBar
有3个children:
- 在索引 0:一个
ActionMenuView
- 在索引 1:包含
Spinner
的 - 在索引 2 处:
AppCompatImageButton
导航按钮
Linearlayout
ActionMenuView
有 5 个 children 类型 ActionMenuItemView
。这些是我一直在寻找的图标。
所以要指向第二个图标的 bottom-left 角,我使用此代码:
ViewGroup overflowMenu = (ViewGroup) scToolbar.getChildAt(0);
int bulbLeft = overflowMenu.getLeft() + overflowMenu.getChildAt(1).getLeft();