我在菜单选项中有一个“购物车”项目,我想在购物车中显示产品数量,如下所示。
为了达到这个目的,我想创建一些数字从1到9和9+的图像,并在打开菜单时将正确的图像设置为相应菜单选项的背景。
我该怎么做,即如何动态更改菜单选项的背景?
由于
答案 0 :(得分:0)
下面是一个可怕的,可怕的黑客改变菜单的背景图像 - 请注意它将改变所有菜单项背景。现在可能有一种更简单的方法,但这是我大约一年前发现的唯一方法。
设置菜单项的图标要容易得多,可以在onPrepareOptionsMenu中完成
// 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;
}
});
}
答案 1 :(得分:0)
覆盖onPrepareOptionsMenu()
菜单方法。每次用户点击Menu
按钮时都会调用它。
@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