底部导航视图android的购物车徽章



我正在构建一个商店android应用程序,我需要在底部导航视图中设置这些项目(主页、购物车、收藏夹等(我需要在购物车上设置徽章以查看购物车中的物品数量我成功构建了底部导航栏,但我无法在图标上添加购物车徽章。这是我在活动中为导航视图设置菜单的代码
MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_products);
Objects.requireNonNull(getSupportActionBar()).hide();
context = this;
tools = Tools.getInstance(context);
prefs = Prefs.getInstance(context);
tools.DisplayLang(prefs.GetLang(),this);
nav = findViewById(R.id.bottom_nav_view);
nav.inflateMenu(R.menu.menu);
nav.setSelectedItemId(R.id.home);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_container,new Home())
.commit();
nav.setOnItemSelectedListener(btm_nav);
}
NavigationBarView.OnItemSelectedListener btm_nav =
new NavigationBarView.OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment;
switch (item.getItemId()) {
case R.id.home:
fragment = new Home();
getSupportFragmentManager().beginTransaction().replace(R.id.frag_container,fragment).commit();
break;
case R.id.fav:
fragment = new Favourite();
getSupportFragmentManager().beginTransaction().replace(R.id.frag_container,fragment).commit();
break;
case R.id.cart:
fragment = new Cart();
getSupportFragmentManager().beginTransaction().replace(R.id.frag_container,fragment).commit();
break;
case R.id.more:
PopupMenu menu = new PopupMenu(Products.this,
findViewById(R.id.more));
menu.getMenuInflater().inflate(R.menu.pop_up,menu.getMenu());
tools.setForceShowIcon(menu);
menu.show();
break;
}
return true;
}
};

@菜单/菜单

<?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/home"
android:title="@string/home"
android:icon="@drawable/home"/>
<item android:id="@+id/cart"
android:title="@string/basket"
android:icon="@drawable/cart"
app:actionLayout="@layout/cart_layout"/>
<item android:id="@+id/fav"
android:title="@string/fav"
android:icon="@drawable/fav"/>
<item android:id="@+id/more"
android:title="@string/more"
android:icon="@drawable/more"/>
</menu>

@layout/cart_layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:src="@drawable/cart"
app:layout_constraintEnd_toStartOf="@+id/txt_count"
app:layout_constraintHorizontal_bias="0.458"
app:layout_constraintStart_toStartOf="@+id/txt_count"
app:layout_constraintTop_toTopOf="@+id/txt_count" />
<TextView
android:id="@+id/txt_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="668dp"
android:background="@drawable/cart_badge"
android:gravity="center"
android:padding="3dp"
android:text="0"
android:textColor="@color/white"
android:textSize="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.598"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

我没有任何错误,但我的问题是徽章没有出现在购物车图标上。我该怎么做?

如果您使用的是Material Components库,则无需为徽章创建额外布局,除非您想要自定义徽章。要将徽章添加到菜单项,请首先使用菜单项的id初始化BadgeDrawable。例如:

BadgeDrawable badge = nav.getOrCreateBadge(R.id.cart);

这里,nav是您的底部导航视图,R.id.cart是您菜单项的id。初始化后,将徽章设置为badge.setVisible(true);可见,最后通过badge.setNumber(1);设置徽章上的数字。您甚至可以通过badge.setBackgroundColor(getResources().getColor(R.color.red));设置徽章的背景颜色,通过badge.setTextColor(getResources().getColor(R.color.white));设置徽章的文本颜色。最后,当您想删除该号码时,只需拨打badge.clearNumber();即可。

最新更新