在 Android 中为 BottomNavigationView 添加角标(徽章)是一个常见需求,可以通过 BadgeDrawable 来实现。以下是详细步骤:

1. 添加依赖
确保在你的 build.gradle 文件中包含 Material Components 依赖:

groovy

dependencies {
    implementation 'com.google.android.material:material:1.6.0' // 确保使用合适的版本
}

2. XML 布局
在布局文件中添加 BottomNavigationView:

xml

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:menu="@menu/bottom_navigation_menu" />

3. 添加角标
在你的 Activity 或 Fragment 中,可以通过以下代码为特定菜单项添加角标:java

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
        
        // 获取并创建徽章
        BadgeDrawable badgeDrawable = bottomNavigationView.getOrCreateBadge(R.id.menu_item_id); // 替换为你的菜单项ID
        
        // 设置徽章的数量
        badgeDrawable.setNumber(5); // 设置徽章的数量
    }
}

4. 更新和移除角标
更新角标数量:
java

badgeDrawable.setNumber(newCount); // 更新徽章数量

移除角标:
java

bottomNavigationView.removeBadge(R.id.menu_item_id); // 替换为你的菜单项ID

完整示例
以下是完整的代码示例:

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);

        // 添加角标
        BadgeDrawable badgeDrawable = bottomNavigationView.getOrCreateBadge(R.id.menu_item_id); // 替换为你的菜单项ID
        badgeDrawable.setNumber(5); // 设置角标数量
    }
}

注意事项
确保你在代码中使用的菜单项 ID 与 XML 中一致。
角标的样式和数量可以根据需求进行自定义和更新。
通过这些步骤,你可以轻松地为 BottomNavigationView 添加和管理角标!

修改BadgeDrawable的颜色

要修改 BadgeDrawable 的颜色,可以使用 setBackgroundColor 方法。以下是如何实现的步骤:

1. 创建 BadgeDrawable

在创建徽章时,获取并配置 BadgeDrawable

BadgeDrawable badgeDrawable = bottomNavigationView.getOrCreateBadge(R.id.menu_item_id);

2. 修改徽章颜色

使用 setBackgroundColor 来修改徽章的背景颜色。例如:

badgeDrawable.setBackgroundColor(getResources().getColor(R.color.your_color)); // 替换为你的颜色

完整示例

以下是完整的代码示例,包括如何设置徽章颜色:

 

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);

        // 创建徽章
        BadgeDrawable badgeDrawable = bottomNavigationView.getOrCreateBadge(R.id.menu_item_id); // 替换为你的菜单项ID
        
        // 设置徽章的数量
        badgeDrawable.setNumber(5);
        
        // 修改徽章的颜色
        badgeDrawable.setBackgroundColor(getResources().getColor(R.color.your_color)); // 替换为你的颜色
    }
}

注意事项

  • 确保 R.color.your_color 是你在 res/values/colors.xml 文件中定义的颜色。
  • 在 API 级别 23 及以上,可以使用 ContextCompat.getColor(context, R.color.your_color) 来获取颜色,以确保兼容性。
ContextCompat.getColor(context, R.color.your_color)

通过以上方法,你就可以修改 BadgeDrawable 的颜色了!