Android - 在MenuItems上绘制徽章

时间:2012-03-22 19:05:19

标签: android

我想在菜单项上显示徽章。我该怎么做?

基本上,我不想绘制或使用画布来这样做。

3 个答案:

答案 0 :(得分:1)

您可以尝试创建LayerListDrawable,将常规图标作为第一层,将徽章作为第二层,然后在setIcon()上使用MenuItem

答案 1 :(得分:0)

Menuitem有一个属性图标,例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/mi_main_preferences"
        android:title="@string/cmd_preferences"
        android:icon="@android:drawable/ic_menu_preferences">
    </item>
</menu>

以上示例使用系统图标(首选项菜单)。

答案 2 :(得分:0)

可以自定义Android中的选项菜单以设置背景或更改文本外观。使用主题和样式无法更改菜单中的背景和文本颜色。

Android源代码(data\res\layout\icon_menu_item_layout.xml)使用“com.android.internal.view.menu.IconMenuItem”类的自定义项来查看菜单布局。我们可以在上面的类中进行更改以自定义菜单。要实现相同目的,请使用LayoutInflater工厂类并为视图设置背景和文本颜色。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.my_menu, menu);
    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 f = getLayoutInflater();
                    final View view = f.createView(name, null, attrs);
                    new Handler().post(new Runnable() {
                        public void run() {
                            // Set the background drawable
                            view .setBackgroundResource(R.drawable.my_ac_menu_background);

                            // Set the text color
                            ((TextView) view).setTextColor(Color.WHITE);
                        }
                    });
                    return view;
                }
                catch (InflateException e) {
                }
                catch (ClassNotFoundException e) {
                }
            }
            return null;
        }
    });
    return super.onCreateOptionsMenu(menu);
}