1

如果我在 menu_main.xml 中使用 actionLayout 属性,为什么我的菜单项变得不可点击?onOptionsItemSelected() 永远不会被调用。我该如何纠正这个问题?

menu_main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/menu_mail"
        android:title="@string/menuMailTitle"
        android:actionLayout="@layout/icon_mail"
        android:icon="@drawable/icons_mail"
        android:showAsAction="always" />

</menu>

onCreateOptionsMenu():

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItemCompat.setShowAsAction(menu.findItem(R.id.menu_mail), MenuItem.SHOW_AS_ACTION_ALWAYS);
    return true;
}
4

2 回答 2

0

更改您的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_mail"
        android:title="@string/menuMailTitle"
        android:actionLayout="@layout/icon_mail"
        android:icon="@drawable/icons_mail"
        android:showAsAction="always" />

</menu>

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_mail"
        android:title="@string/menuMailTitle"
        app:actionLayout="@layout/icon_mail"
        android:icon="@drawable/icons_mail"
        app:showAsAction="always" />

</menu>

请注意“应用程序”特定名称空间的使用。

于 2015-02-22T23:15:17.547 回答
0

它应该像这样使用:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_mail, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.icons_mail:
            break;
        default:
            return super.onOptionsItemSelected(item);
    }
    return true;
}
于 2013-10-04T19:38:16.657 回答