轻触溢出菜单会更改应用程序功能

时间:2018-06-23 19:59:27

标签: java android android-actionbar drawable porter-duff

这是一个着色应用程序,我想拥有它,因此有一个调色板图标可以根据用户选择的颜色来改变颜色。在单击溢出菜单按钮之前,这可以正常工作。单击溢出菜单菜单按钮后,除非单击该图标,否则图标不会更改颜色。即使您只单击溢出菜单按钮并且不选择任何选项,仍然会发生这种情况。这一直持续到您重新启动应用程序为止。这是我制作的正在运行的应用的视频片段,其中显示错误:https://youtu.be/UJ1YUom_Akw

这是操作栏菜单:

<?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/palette"
    android:title=""
    app:showAsAction="always"
    android:icon="@drawable/palette" />

<item
    android:id="@+id/white"
    android:title="White"
    app:showAsAction="never" />

代码如下:

Menu menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button blue = (Button) findViewById(R.id.blue);
    Button red = (Button) findViewById(R.id.red);
    Button green = (Button) findViewById(R.id.green);
    Button yellow = (Button) findViewById(R.id.yellow);

    blue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            menu.findItem(R.id.palette)
                    .getIcon().mutate()
                    .setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY);
        }
    });

    red.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            menu.findItem(R.id.palette)
                    .getIcon().mutate()
                    .setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
        }
    });

    green.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            menu.findItem(R.id.palette)
                    .getIcon().mutate()
                    .setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);
        }
    });

    yellow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            menu.findItem(R.id.palette)
                    .getIcon().mutate()
                    .setColorFilter(Color.YELLOW, PorterDuff.Mode.MULTIPLY);
        }
    });


}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.white) {
        menu.findItem(R.id.palette)
                .getIcon().mutate()
                .setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
        return true;
    } else if (id == R.id.palette) {
        return true;
    }

    return false;
}

0 个答案:

没有答案