2012-03-22 113 views
0

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

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

+0

你只想与你的菜单项相关联的图像.. – 2012-03-22 19:07:43

+0

是,位图,在右上角 – 2012-03-22 19:15:02

+0

的数字。如果你想要的东西的邮件图标的..然后,它是复杂的任务并需要通过自定义控件处理,,你可以简单地有一个按钮,该图像的形式与某些文本和重力作为顶部|右等 – 2012-03-22 19:26:13

回答

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); 
} 
+0

这帮了我,但它不是我正在寻找什么 – 2012-04-01 17:07:14

0

菜单项具有属性图标,例如:

<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> 

上面的例子使用系统图标(偏好菜单)。

+0

但是我怎么能有bbadge呢 – 2012-03-22 19:17:30

+0

对不起,我的英文不好。图标和徽章有区别吗? – 2012-03-23 00:16:36

+0

是的,徽章显示在图标的顶部 – 2012-03-23 19:09:25

1

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

+1

你可以有任何代码片段来解释。 PLZ – 2012-03-23 19:09:59