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