如何使用溢出菜单中显示的菜单项显示徽章

How to Display Badges with Menu Items that are displayed in the overflow menu

我正在 Android Menu Items. I can able to add Badges with the Items that are displayed in the Action Bar .But i want to show the same Badges with the Overflow Menu Items. Is there any solutions to Add Badges to Menu Items in overflow menu Like the Sample Image and

任何帮助将不胜感激..!!!

你能试试下面吗

main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/badge"
        android:actionLayout="@layout/badge_layout"
        android:title="Badges"
        android:showAsAction="always">
    </item>
</menu>

这里 badge_layout 是带有徽章的菜单项布局。

及以下是在activity中实现的代码。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView();
        mCounter = (TextView) badgeLayout.findViewById(R.id.counter);
        return true;
    }

最后我在自定义 PopUp Window + BadgeView

的帮助下做到了

这是我完成的。

  1. 为弹出窗口创建自定义布局 Window - custom_popup.xml

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    
        <ImageView
            android:id="@+id/icon"
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:background="@drawable/icon_menu_facebook"
            android:text="Icon" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Notifications" />
    
        <TextView
            android:id="@+id/badge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    
        <ImageView
    
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:background="@drawable/icon_menu_facebook"
            android:text="Icon" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Notifications" />
    
        <TextView
    
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    
        <ImageView
    
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:background="@drawable/icon_menu_facebook"
            android:text="Icon" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Notifications" />
    
        <TextView
    
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />
    </LinearLayout>
    

2.添加了带有自定义图标的菜单项(溢出菜单图标)- options_menu.xml

  <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/ViewSource"
        android:icon="@drawable/ic_action_viewsource"
        android:title="ViewSource"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/about"
        android:icon="@drawable/ic_action_about"
        android:title="About"
        app:showAsAction="ifRoom">
        <!-- "file" submenu -->
        <menu>
            <item
                android:id="@+id/github"
                android:icon="@drawable/icon_menu_github"
                android:title="Github" />
            <item
                android:id="@+id/linkedin"
                android:icon="@drawable/icon_menu_linkedin"
                android:title="LinkedIn" />
            <item
                android:id="@+id/twitter"
                android:icon="@drawable/icon_menu_twitter"
                android:title="Twitter" />
            <item
                android:id="@+id/facebook"
                android:icon="@drawable/icon_menu_facebook"
                android:title="Facebook" />
        </menu>
    </item>

    <item
        android:id="@+id/notifications"
        android:icon="@drawable/ic_action_name"
        android:title="More"
        app:showAsAction="always"></item>

</menu>
  1. 在 MainActivity.java 中添加了以下代码在 onOptionsItemSelected(MenuItem item)

          case R.id.notifications:
                LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
                View CustomPopUp = layoutInflater.inflate(R.layout.custom_popup, null);
                popupWindow = new PopupWindow(CustomPopUp, ActionBar.LayoutParams.WRAP_CONTENT,
                        ActionBar.LayoutParams.WRAP_CONTENT);
                if (Build.VERSION.SDK_INT >= 21) {
                    popupWindow.setElevation(5.0f);
                }
                ViewGroup actionBar = getActionBar(getWindow().getDecorView());
                TextView tv_badge = (TextView) CustomPopUp.findViewById(R.id.badge);
                BadgeView badge = new BadgeView(activity);
                badge.setTargetView(tv_badge);
                badge.setBadgeCount(45);
                popupWindow.showAtLocation(actionBar, Gravity.TOP | Gravity.RIGHT, 0, -70);
                popupWindow.setAnimationStyle(R.style.Animation);
                linearlatout.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        popupWindow.dismiss();
                    }
                });
                return true;
           default:
                return super.onOptionsItemSelected(item);
    

就这些了..!!!快乐编码...!!!