Hãy thử điều này một lần.
1) Tạo tệp xml cho huy hiệu (ví dụ: notification_badge_view.xml)
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/badge"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="top|center_horizontal"
android:layout_marginStart="10dp"
android:gravity="center"
android:padding="3dp"
app:srcCompat="@drawable/notification_badge" />
</FrameLayout>
2) Tạo tệp có thể vẽ cho hình dạng chấm thông báo (ví dụ: huy hiệu_circle.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/colorAccent" />
<stroke
android:width="2dp"
android:color="@android:color/white" />
</shape>
3) Trong hoạt động của bạn, phương pháp onCreate thêm chế độ xem huy hiệu vào BottomNavigationView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_landing);
addBadgeView();
}
4) Và phương thức addBadgeView bên dưới
private void addBadgeView() {
try {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationBar.getChildAt(0);
BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(0);
notificationBadge = LayoutInflater.from(LandingActivity.this).inflate(R.layout.view_notification_badge, menuView, false);
itemView.addView(notificationBadge);
notificationBadge.setVisibility(GONE);
} catch (Exception e) {
e.printStackTrace();
}
}
Lưu ý: bottomNavigationBar là chế độ xem thanh dưới cùng của bạn.
5) Làm mới huy hiệu để hiển thị và ẩn bằng phương pháp sau
private void refreshBadgeView() {
try {
boolean badgeIsVisible = notificationBadge.getVisibility() != GONE;
notificationBadge.setVisibility(badgeIsVisible ? GONE : VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
6) Và thực hiện ẩn khi chúng ta nhấp vào trang thanh dưới cùng cụ thể bằng cách dòng sau.
bottomNavigationBar.setOnNavigationItemSelectedListener(new
BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem)
{
switch (menuItem.getItemId()) {
case R.id.bottom_bar_one:
notificationBadge.setVisibility(GONE);
break;
case R.id.bottom_bar_two:
break;
case R.id.bottom_bar_three:
break;
}
return true;
}
});