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

时间:2017-02-27 04:55:12

标签: android android-actionbar overflow-menu

我正在研究Android Menu Items。我可以使用Action Bar 中显示的项目添加徽章。但我想在溢出菜单项中显示相同的徽章。是否有任何解决方案可以在溢出菜单中为菜单项添加徽章像示例图像Image 1Image 2

任何帮助都会非常感谢.. !!!

2 个答案:

答案 0 :(得分:1)

你能试试吗?

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是带徽章的菜单项布局。

以下是在活动中实现的代码。

@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;
    }

答案 1 :(得分:0)

最后,我使用了自定义PopUp Window + BadgeView

的帮助

这就是我完成的事情。

  1. 为PopUp窗口创建自定义布局 - 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. 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项目)中添加了以下代码

            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);
      
    2. 多数民众赞成...... !!!快乐的编码...... !!!