如何以编程方式更改菜单溢出按钮?

How to change menu overflow button programmatically?

所以我在视图中有一个溢出菜单按钮,我已将其转换为编辑按钮。这是按钮的 XML 代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".HomeActivity">
    <item android:id="@+id/action_edit"
        android:title="Edit"
        android:icon="@drawable/editbutton"
        app:showAsAction="always"/>
</menu>

我还在如下按下的编辑按钮上创建了一个 java 函数:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_edit:
            floatIn.start();
            fabImageButton.setTranslationX(-1 * fabOffset);
            populateAnimators();
            openAnimSet.start();
            return true;
    }

    return super.onOptionsItemSelected(item);
}

我想要做的是当按下编辑按钮时,在 onOptionsItemSelected 的 case 语句中更改菜单按钮的可绘制对象(从编辑可绘制对象到关闭可绘制对象),然后更改 属性 这样,如果在显示新的可绘制对象时再次按下按钮,则会触发一组不同的 java 代码。我在考虑以编程方式更改 ID,然后添加另一个 case 语句?当按下关闭编辑按钮时,需要将其转换回原始按钮。

谢谢

卡比尔

您可以通过以下方式更改可绘制的菜单

item.findItem(R.id.my_menu_item).setIcon(R.drawable.my_drawable);

您可以通过多种方式处理状态变化。不过,更改 id 似乎不是最佳解决方案。我通过使用枚举来跟踪可绘制菜单的状态来处理我的代码中的类似情况。以下是我如何处理类似的事情:

    public void setMenuIconState(State state) {
    switch (state) {
        case READY:
            mMenu.findItem(R.id.action_next).setIcon(R.drawable.small_arrow_green);
            mReady = true;
            break;
        case WAITING:
            mMenu.findItem(R.id.action_next).setIcon(R.drawable.small_clock_gray);
            mReady = false;
            break;
        default:
            mReady = false;
    }
}

然后,当我的菜单项被点击时,我是这样处理的:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mReady) {
       // do some stuff
    }
    else {
        return super.onOptionsItemSelected(item);
    }
}