android - 如何在工具栏菜单项图标上添加徽章

标签 android android-toolbar badge

我试图为自己找到答案,但找不到。

我需要在工具栏中的 MenuItem 图标上制作徽章,如下所示:

enter image description here

我该怎么做?

最佳答案

这是一步一步的功能:

添加菜单.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/actionNotifications"
              android:icon="@drawable/ic_info_outline_white_24dp"
              android:menuCategory="secondary"
              android:orderInCategory="1"
              android:title="Cart"
              app:actionLayout="@layout/notification_layout"
              app:showAsAction="always" />
    </menu>

然后添加notification_layout.xml,此布局将用作通知图标布局

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        style="@android:style/Widget.ActionButton"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:background="@android:color/transparent"
        android:clickable="true"
        android:gravity="center"
        android:orientation="vertical">

     <ImageView
         android:id="@+id/hotlist_bell"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margin="0dp"
         android:contentDescription="Notification Icon"
         android:gravity="center"
         android:src="@drawable/ic_info_outline_white_24dp" />

     <TextView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/txtCount"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginBottom="@dimen/x5dp"
         android:layout_marginLeft="@dimen/x10dp"
         android:layout_marginRight="0dp"
         android:background="@drawable/pointer_"
         android:gravity="center"
         android:minWidth="17sp"
         android:text="0"
         android:textColor="#ffffffff"
         android:textSize="12sp" />
    </RelativeLayout>

现在在 Activity 中

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    final View notificaitons = menu.findItem(R.id.actionNotifications).getActionView();

    txtViewCount = (TextView) notificaitons.findViewById(R.id.txtCount);
    updateHotCount(count++);
    txtViewCount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            updateHotCount(count++);
        }
    });
    notificaitons.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    //    TODO
        }
    });


    return true;
}

您可以将以下函数(取自 stackoverflow)放入 Activity 中以更新计数器:

    public void updateHotCount(final int new_hot_number) {
    count = new_hot_number;
    if (count < 0) return;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (count == 0)
                txtViewCount.setVisibility(View.GONE);
            else {
                txtViewCount.setVisibility(View.VISIBLE);
                txtViewCount.setText(Integer.toString(count));
                // supportInvalidateOptionsMenu();
            }
        }
    });
}      

关于android - 如何在工具栏菜单项图标上添加徽章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009812/

相关文章:

ios11 - CKModifyBadgeOperation 在 iOS 11 中已弃用。有人知道替代方法吗?

android - 我如何将 android 位图别名为另一个尺寸的可绘制对象(drawable-large-mdpi 别名为 drawable-hdpi)

android - 使用 MaterialToolbar 在 AppBarLayout 中居中标题

android - 缩放 ImageView 以适应 ToolBar 并重叠

css - 如何在 Font Awesome 符号上添加徽章?

ios - 在 Swift 中更新角标(Badge)计数器

Android ExpandableListView 不展开

android - 将 "Tweet"按钮添加到 Android 的 C++ 应用程序的最佳方法是什么

android - 如何在 Android 中以编程方式触发 onNavigationItemSelected()?

android - 如何在android中的工具栏添加 Action 搜索图标