在菜单中更改可绘制的颜色

时间:2016-12-14 05:57:58

标签: android xml menu popup

我创建了一个popup menu,在popup.xml中,我有两个图标。我试图改变popup.xml中图标的颜色,但颜色始终保持白色(原始颜色)。

  

有没有办法在菜单中更改可绘制的颜色?

popup.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/opt1"
        android:icon="@drawable/change_pic"
        android:color="@color/green"
        android:title="Change Picture" />
    <item
        android:id="@+id/opt2"
        android:icon="@drawable/change_pin"
        android:title="Change Password" />
</menu>

截图

enter image description here

代码

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.add_task, menu); // for the two icons in action bar
        return true;
    }

    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {

                case R.id.menu:
                    View menuItemView = findViewById(R.id.menu);
                    MenuBuilder menuBuilder =new MenuBuilder(this);
                    MenuInflater inflater = new MenuInflater(this);
                    inflater.inflate(R.menu.popup, menuBuilder);
                    MenuPopupHelper optionsMenu = new MenuPopupHelper(this, menuBuilder, menuItemView);
                    optionsMenu.setForceShowIcon(true);
                    optionsMenu.show();

                default:
                    return super.onOptionsItemSelected(item);
            }
        }

如您所见,图像实际上是白色。

2 个答案:

答案 0 :(得分:2)

请试试这个

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.menu:
                View menuItemView = findViewById(R.id.menu);
                MenuBuilder menuBuilder =new MenuBuilder(this);
                MenuInflater inflater = new MenuInflater(this);
                inflater.inflate(R.menu.popup, menuBuilder);
 Drawable yourdrawable1 = menuBuilder.getItem(0).getIcon(); // change 0 with 1,2 ... 
            Drawable yourdrawable2 = menuBuilder.getItem(1).getIcon();
            yourdrawable1.mutate();
            yourdrawable2.mutate();
             yourdrawable1.setColorFilter(getResources().getColor(R.color.black), PorterDuff.Mode.SRC_IN);
yourdrawable2.setColorFilter(getResources().getColor(R.color.black), PorterDuff.Mode.SRC_IN);
                MenuPopupHelper optionsMenu = new MenuPopupHelper(this, menuBuilder, menuItemView);
                optionsMenu.setForceShowIcon(true);
                optionsMenu.show();

            default:
                return super.onOptionsItemSelected(item);
        }
    }

答案 1 :(得分:1)

change_pic是图像文件或矢量资产文件??? 如果它是矢量资产,那么你可以改变.xml文件的颜色,如果你使用的是图像文件,那么我建议你使用矢量资产文件。