Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态更改选项菜单背景_Android_Menu_Background - Fatal编程技术网

Android 动态更改选项菜单背景

Android 动态更改选项菜单背景,android,menu,background,Android,Menu,Background,我在菜单选项中有一个“购物车”项目,我想显示购物车中的产品数量,如下所示 为了实现这一点,我想创建几个数字为1到9和9+的图像,并在打开菜单时将正确的图像设置为相应菜单选项项的背景 如何做到这一点,即如何动态更改菜单选项项的背景 谢谢下面是一个非常可怕的修改菜单背景图像的黑客程序-注意,它会修改所有菜单项的背景。现在可能有更简单的方法,但这是我一年前找到的唯一方法 设置菜单项的图标要容易得多,可以在OnPrepareOptions菜单中完成 // Hack to make the menu i

我在菜单选项中有一个“购物车”项目,我想显示购物车中的产品数量,如下所示

为了实现这一点,我想创建几个数字为1到9和9+的图像,并在打开菜单时将正确的图像设置为相应菜单选项项的背景

如何做到这一点,即如何动态更改菜单选项项的背景


谢谢

下面是一个非常可怕的修改菜单背景图像的黑客程序-注意,它会修改所有菜单项的背景。现在可能有更简单的方法,但这是我一年前找到的唯一方法

设置菜单项的图标要容易得多,可以在OnPrepareOptions菜单中完成

// Hack to make the menu item selector blue
    protected void setMenuBackground(final int id)
    {
        if(getLayoutInflater().getFactory() != null)
            return;
        getLayoutInflater().setFactory(new Factory()
        {
            @Override
            public View onCreateView(String name, Context context, AttributeSet attrs)
            {
                if(name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView"))
                {
                    try
                    {
                        LayoutInflater li = getLayoutInflater();
                        final View view = li.createView(name, null, attrs);
                        //What?
                        //Well the Android system is going to set the background after this is method is done
                        //so we run it later to override the override. Simples?
                        new Handler().post(new Runnable()
                        {
                            public void run()
                            {
                                view.setBackgroundResource(id);
                            }
                        });
                        return view;
                    }
                    catch(InflateException e)
                    {
                    }
                    catch(ClassNotFoundException e)
                    {

                    }
                }
                return null;
            }
        });
    }

重写
onprepareOptions菜单()
菜单方法。每次用户单击
菜单
按钮时都会调用它

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // Let's find id of resource for drawable with required count
    // assuming you have cartIcon1.png, cartIcon2.png etc
    // in your `drawable` folder
    int resId = getResources().getIdentifier("cartIcon" + numberOfElementsInCart, "drawable", getPackageName()); 

    if (resId != 0)
        menu.findItem(R.id.cart).setIcon(resId);
    // If resource was not found, set default icon
    else 
        menu.findItem(R.id.cart).setIcon(R.drawable.defaultCart);

    return true;
}
覆盖背景要困难得多,我相信有带有购物车和数字的图标更方便,因为每个数字都有.png