如何为菜单项注册ContextMenu

时间:2017-10-04 10:06:42

标签: android menu contextmenu menuitem

我想点击MenuItem打开一个contextMenu。如何在我的活动中为选项菜单项注册上下文菜单。 在这种情况下我可以在registerForContextMenu(?view?);传递哪个视图?

这是我的menuItem

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_change_font"
        android:orderInCategory="100"
        android:title="@string/pref_font_size_title"
        app:showAsAction="never"
        android:visible="true"/>
</menu>

这是我的contextMenu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item android:id="@+id/font_small"
            android:title="@string/small"/>
        <item android:id="@+id/font_medium"
            android:title="@string/medium"/>
        <item android:id="@+id/font_large"
            android:title="@string/large" />
    </group>

</menu>

这是OnCreateMenuItem方法

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_font_size, menu);
        return true;
    }

这是我的OnOptionsItemSelected方法

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        finish();
    } else if(id == R.id.action_change_font){
        // want to open context menu
    }
    return super.onOptionsItemSelected(item);
}

1 个答案:

答案 0 :(得分:0)

像这样将上下文菜单移动到根菜单中。选择“更改字体”项将自动打开一个子菜单。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_change_font"
        android:orderInCategory="100"
        android:title="@string/pref_font_size_title"
        app:showAsAction="never"
        android:visible="true">

        <menu>
            <group android:checkableBehavior="single">
                <item android:id="@+id/font_small"
                    android:title="@string/small"/>
                <item android:id="@+id/font_medium"
                    android:title="@string/medium"/>
                <item android:id="@+id/font_large"
                    android:title="@string/large" />
            </group>
        </menu>

    </item>
</menu>

处理子菜单直接在onOptionsItemSelected方法中单击。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        finish();
    } else if(id == R.id.font_small){
        // Change font to small
    }
    return super.onOptionsItemSelected(item);
}