当前位置: 首页 > article >正文

BottomNavigationView 添加角标

在 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 的颜色了!


http://www.kler.cn/news/319809.html

相关文章:

  • c++开发实战之网络编程(一)
  • 三维重建的几何评价指标
  • 面试算法题精讲:求数组两组数差值和的最大值
  • 只出现一次的数字 II
  • Redis:事务
  • Hive 的窗口函数 详解
  • 代码随想录算法训练营| 454.四数相加II 、 383. 赎金信 、 15. 三数之和 、 18. 四数之和
  • 有威胁的武器武装检测系统源码分享
  • WebGL渲染与创建2D内容
  • 树——数据结构
  • 移动端如何实现智能语音交互
  • 【LGR-200-Div.4】洛谷入门赛 #27 A - H题解,包含(C++, Go语言)
  • Mybatis中sql数组为空判断
  • SpringBoot 整合docker,执行容器服务
  • Qt系统相关——事件
  • JavaScript --模版字符串用反引号
  • Qt (19)【Qt 线程安全 | 互斥锁QMutex QMutexLocker | 条件变量 | 信号量】
  • python学习笔记(3)——控制语句
  • Java获取Object中Value的方法
  • 数据结构-3.链表
  • 无人机在隧道中如何实现在无卫星信号下的自主导航
  • 将ipad作为数位板使用教程/出现延迟拖拽怎么办?
  • 在jupyter notebook中取消代理服务器的解决方案
  • 编程遇到问题了?一个命令让 AI 解决你的困惑!
  • Android——内部/外部存储
  • HTTP常见状态码 HTTP的逐步发展(通俗易懂版)
  • 利士策分享,赚钱有道,底线思维不可抛
  • 网络安全-shire写任务计划、反弹shell、写私钥、反序列化
  • 机器学习算法与Python实战 | 三万字详解!GPT-5:你需要知道的一切(上)建议收藏!
  • 性能监控之Python实战SkyWalking链路追踪