【发布时间】:2016-07-05 02:12:30
【问题描述】:
我正在为应用程序开发教程,我需要指向工具栏中的特定图标。
以下是操作菜单的 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:title="@string/Erase"
android:icon="@android:drawable/ic_delete"
android:orderInCategory="10"
app:showAsAction="ifRoom|collapseActionView" />
<item android:id="@+id/AbSuggest"
android:title="@string/Suggest"
android:icon="@mipmap/ic_lightbulb_outline_white_48dp"
android:orderInCategory="50"
app:showAsAction="ifRoom|collapseActionView" />
<item android:id="@+id/AbUndo"
android:title="@string/ActionBarUndo"
android:icon="@android:drawable/ic_menu_revert"
android:orderInCategory="51"
app:showAsAction="ifRoom|collapseActionView" />
...
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isBeingRestored = (savedInstanceState != null);
Toolbar scToolbar = (Toolbar) findViewById(R.id.Sc_toolbar);
setSupportActionBar(scToolbar);
scToolbar.post(new Runnable() {
@Override
public void run() {
if (!isBeingRestored) {
//View mErase = findViewById(R.id.AbErase);
View mErase = overflowMenu.getItem(0).getActionView();
int[] location = new int[2];
mErase.getLocationOnScreen(location);
eraseIconLeft = location[0];
}
}
}
View mErase = findViewById(R.id.AbErase); mErase 设置为 null, **** start EDIT **** 这并不奇怪,因为 AbErase 是 MenuItem 的 id,而不是 id的一个视图。 **** 结束编辑 ****
View mErase = overflowMenu.getItem(0).getActionView(); location 设置为 (0, 24),这是错误的,因为工具栏中已经有徽标图标和标题。
如何获取工具栏中AbErase 视图的绝对X 坐标?
**** 编辑 ****
这是静态变量overflowMenu的初始化代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
actionBar.collapseActionView();
overflowMenu = menu;
isInitializedMenuItem = menu.findItem(R.id.AbInitialized);
isInitializedMenuItem.setChecked(isInitializeCbxChecked);
return super.onCreateOptionsMenu(menu);
}
【问题讨论】:
标签: android android-actionbar android-menu