BottomNavigationView 添加角标

news/2024/9/23 13:13:15 标签: 开发语言

在 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.niftyadmin.cn/n/5671984.html

相关文章

网站设计中安全方面都需要有哪些考虑

网站设计中的安全性是一个多方面的问题&#xff0c;需要从多个角度进行考虑和实施。以下是一些关键的安全考虑因素&#xff1a; 数据加密&#xff1a; 使用SSL&#xff08;安全套接字层&#xff09;证书来建立加密连接&#xff0c;确保数据在传输过程中不被截获。定期更新SSL证…

Vue(14)——组合式API①

setup 特点&#xff1a;执行实际比beforeCreate还要早&#xff0c;并且获取不到this <script> export default{setup(){console.log(setup函数);},beforeCreate(){console.log(beforeCreate函数);} } </script> 在setup函数中提供的数据和方法&#xff0c;想要在…

Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像

1.定义参数&#xff1a; 使用 booleanParam 定义一个布尔参数&#xff0c;示例如下 booleanParam(name: BUILD_DOCKER, description: 是否构建Docker镜像, defaultValue: false)2.使用参数&#xff1a; 在 stage 中&#xff0c;根据参数的值决定构建方式&#xff1a; stage(编…

摆脱困境并在 Android 手机上取回删除照片的所有解决方案

没有什么比不小心从 Android 智能手机中删除所有照片更糟糕的了。这样&#xff0c;除非您在重置之前已经备份了数据&#xff0c;否则您的所有照片都会消失。如果您忘记备份照片&#xff0c;您仍然可以按照一些简单的技术在 Android 设备上恢复已删除的照片。 您的 Android 智能…

【Godot4.3】基于状态切换的游戏元素概论

提示 本文的设想性质比较大,只是探讨一种设计思路。完全理论阶段&#xff0c;不可行就当是闹了个笑话O(∩_∩)O哈哈~但很符合我瞎搞的气质。 概述 一些游戏元素&#xff0c;其实是拥有多个状态的。比如一个宝箱&#xff0c;有打开和关闭两个状态。那么只需要设定两个状态的图…

Isaac Sim 4.2.0 Windows版本打开报 fbgemm.dll 加载错误

方案一&#xff1a;下载缺少的dll复制到目录里即可 可以看到后台命令窗口出现了错误&#xff0c;发生在import pytorch的时候&#xff0c;根据提示&#xff0c;是因为fbgemm.dll缺少依赖&#xff0c;导致加载异常&#xff0c;一般情况是缺少 libomp140.x86_64.dll 这个文件&am…

【黑客技术】需要你的传承!

CSDN大礼包&#xff1a;&#x1f449;《对标字节黑客&网络安全入门&进阶学习资源包》免费分享 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营…

[数据集][目标检测]中草药类型识别检测数据集VOC+YOLO格式7976张45类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7976 标注数量(xml文件个数)&#xff1a;7976 标注数量(txt文件个数)&#xff1a;7976 标注…