Android-BadgeView-消息红点

BottomNavigationView+ViewPage2r+Fragment 添加消息红点/数字,可以对红点进行显示、隐藏、更新消息数量操作,原生代码实现。
https://github.com/1900Star/BadgeView-BottomNavigationView

badgeview.jpg

Activity布局 ,Fragment布局就不贴了,可以看源码。




主要的代码

BottomNavigationView中,每一个 单独的菜单 BottomNavigationItemView 默认都有两个子View,分别是菜单的图标和菜单的描述文字。通过

 BottomNavigationItemView.getChildCount()

可以拿到每个菜单子View的数量,默认数量为 2。即默认的菜单图标(索引为 0)和菜单文字(索引为 1)。
在某个菜单上添加消息红点之后,菜单的子View数量为 3,如果不清除已经添加的红点子View,子View的数量会一直增加。
每次添加红点时都判断当前子View数量是否大于2,大于2 表示当前菜单已经添加红点子View ,
后续更新红点信息就先移除已经添加的红点子View(就是第3个子View,索引为 2),再重新添加新的红点消息。

在Fragment中输入消息数量,点击添加按钮显示红点。

public void showBadgeCount(int menuPosition, int noticeCount) {
    int maxNoticeCount = 99;
    BottomNavigationMenuView menuView = (BottomNavigationMenuView) mBottomNavigationView.getChildAt(0);
    BottomNavigationItemView badgeMenuItemView = (BottomNavigationItemView) menuView.getChildAt(menuPosition);
    // 判断当前菜单是否已经添加红点,如果已经添加就先移除。
    removeMenuChild(badgeMenuItemView);
    View badgeView = LayoutInflater.from(this).inflate(R.layout.notice_badge, menuView, false);
    badgeView.setTag(menuPosition);
    mMenuSparesArray.put(menuPosition, badgeMenuItemView);
    badgeMenuItemView.addView(badgeView);
    TextView tvNotic = badgeView.findViewById(R.id.tv_badge);
    TextView tvDot = badgeView.findViewById(R.id.tv_badge_dot);
    tvDot.setVisibility(noticeCount > maxNoticeCount ? View.VISIBLE : View.GONE);
    tvNotic.setVisibility(noticeCount > maxNoticeCount ? View.GONE : View.VISIBLE);
    if (noticeCount <= maxNoticeCount) {
        tvNotic.setText(String.valueOf(noticeCount));
    }
}

消息数量为0时,点击移除按钮移除红点消息。

public void removeBadgeCount(int menuPosition) {
    if (mMenuSparesArray.size() > 0) {
        BottomNavigationItemView badgeItemView = mMenuSparesArray.get(menuPosition);
        removeMenuChild(badgeItemView);
    }
}

移除已经添加的红点子View(就是第3个子View,索引为 2)

private void removeMenuChild(BottomNavigationItemView badgeItemView) {

    int childCount = 2;
    if (badgeItemView.getChildCount() > childCount) {
        View childAtView = badgeItemView.getChildAt(2);
        badgeItemView.removeView(childAtView);
    }
}

更多内容请查看源码

https://github.com/1900Star/BadgeView-BottomNavigationView

你可能感兴趣的:(Android-BadgeView-消息红点)