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