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

安卓底部导航栏BottomNavigationView

目录

1. BottomNavigationView

(1) 准备BottomNavigationView使用的菜单资源文件

(2) 准备颜色选择器

(3) BottomNavigationView控件设置

 (4) 在Java代码中设置OnItemSelectedListener监听器

(5) 与Fragment配合

2. BottomTabBar


实现安卓底部导航栏,google为我们提供了BottomNavigationView类。第三方提供了简易版BottomTabBar类

1. BottomNavigationView

(1) 准备BottomNavigationView使用的菜单资源文件

res / menu / xxx.xml

使用BottonNavigationView中 app:menu属性 设置。

//例.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"tools:showIn="navigation_view"><item android:id="@+id/item1"android:icon="@drawable/ic_home_main"android:title="home"/><item android:id="@+id/item2"android:icon="@drawable/ic_home_butt"android:title="butt"/><item android:id="@+id/item3"android:icon="@drawable/ic_home_chat"android:title="chat"/><item android:id="@+id/item4"android:icon="@drawable/ic_home_mime"android:title="mime"/>
</menu>

(2) 准备颜色选择器

BottomNavigationView的颜色通常设置为颜色选择器,然后使用 app:itemTextColor属性 设置文字颜色,使用 app:itemIconTint属性 设置图标颜色,也可不进行设置。

res / color / xxx.xml

//例.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:color="@color/purple_700" android:state_checked="true"/><item android:color="@color/black" android:state_checked="false"/>
</selector>

(3) BottomNavigationView控件设置

<com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/bottomNavigationView"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"app:menu="@menu/bottom_navigation_view_menu"app:itemTextColor="@color/my_color"app:itemIconTint="@color/my_color" />

 (4) 在Java代码中设置OnItemSelectedListener监听器

BottomNavigationView bottomNavigationView=findViewById(R.id.bottomNavigationView);
bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {public boolean onNavigationItemSelected(MenuItem item) {// 选择itemif( item.getItemId() == R.id. itemX ){//判断点击的Item的Id是否是指定Item的Id}//必须返回true,返回falseBottomNavigationView将不变化return true;}
});

(5) 与Fragment配合

BottomNavigationView与Fragment的配合一般通过onItemSelectedListener监听器

获取碎片管理者,需使用getSupportFragmentManager(),而getFragmentManager()已淘汰

public class MainActivity extends AppCompatActivity {private Fragment f1,f2,f3,f4;private FragmentManager fragmentManager;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);f1=new Fragment1();f2=new Fragment2();f3=new Fragment3();f4=new Fragment4();//获取碎片管理者,需使用getSupportFragmentManager(),而getFragmentManager()已淘汰fragmentManager=getSupportFragmentManager();FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();fragmentTransaction.add(R.id.frameLayout,f1);fragmentTransaction.add(R.id.frameLayout,f2);fragmentTransaction.add(R.id.frameLayout,f3);fragmentTransaction.add(R.id.frameLayout,f4);fragmentTransaction.hide(f2);fragmentTransaction.hide(f3);fragmentTransaction.hide(f4);fragmentTransaction.commit();BottomNavigationView bottomNavigationView=findViewById(R.id.bottomNavigationView);bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {private int nowFragment=R.id.item1;public boolean onNavigationItemSelected(@NonNull MenuItem item) {int itemId=item.getItemId();FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();switch (nowFragment){case R.id.item1:fragmentTransaction.hide(f1);break;case R.id.item2:fragmentTransaction.hide(f2);break;case R.id.item3:fragmentTransaction.hide(f3);break;case R.id.item4:fragmentTransaction.hide(f4);break;}switch (itemId){case R.id.item1:fragmentTransaction.show(f1);break;case R.id.item2:fragmentTransaction.show(f2);break;case R.id.item3:fragmentTransaction.show(f3);break;case R.id.item4:fragmentTransaction.show(f4);break;}fragmentTransaction.commit();nowFragment=itemId;return true;}});}
}

2. BottomTabBar

该方法于2018.8.25进行最后一次更新,不建议使用。

compile 'com.hjm:BottomTabBar:1.2.2'
    <com.hjm.bottomtabbar.BottomTabBarandroid:id="@+id/bottom_tab_bar"android:layout_width="match_parent"android:layout_height="match_parent"  hjm:tab_bar_background="#FFFFFF"                     //BottomTabBar的整体背景颜色hjm:tab_divider_background="#FF0000"                 //分割线背景hjm:tab_font_size="14px"                             //文字尺寸hjm:tab_img_font_padding="0"                       //图片文字间隔hjm:tab_img_height="70px"                            //图片高度hjm:tab_img_width="70px"                            //图片宽度hjm:tab_isshow_divider="true"                        //是否显示分割线hjm:tab_padding_bottom="5px"                        //下边距hjm:tab_padding_top="5px"                           //上边距hjm:tab_selected_color="#000000"                     //选中的颜色hjm:tab_unselected_color="@color/colorPrimary"/>     //未选中的颜色
 mBottomBar = findViewById(R.id.bottom_bar);mBottomBar.init(getSupportFragmentManager(), 720, 1280)
//                .setImgSize(70, 70)
//                .setFontSize(14)
//                .setTabPadding(5, 0, 5)
//                .setChangeColor(Color.parseColor("#FF00F0"),Color.parseColor("#CCCCCC")).addTabItem("第一项", R.mipmap.home_selected, R.mipmap.home, OneFragment.class).addTabItem("第二项", R.mipmap.list, TwoFragment.class).addTabItem("第三项", R.mipmap.user, ThreeFragment.class)
//                .isShowDivider(true)
//                .setDividerColor(Color.parseColor("#FF0000"))
//                .setTabBarBackgroundColor(Color.parseColor("#00FF0000")).setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {@Overridepublic void onTabChange(int position, String name, View view) {if (position == 1)mBottomBar.setSpot(1, false);}}).setSpot(1, true).setSpot(2, true);

详见:超简单,几行代码搞定Android底部导航栏 - 简书 (jianshu.com)

相关文章:

安卓底部导航栏BottomNavigationView

目录 1. BottomNavigationView (1) 准备BottomNavigationView使用的菜单资源文件 (2) 准备颜色选择器 (3) BottomNavigationView控件设置 (4) 在Java代码中设置OnItemSelectedListener监听器 (5) 与Fragment配合 2. BottomTabBar 实现安卓底部导航栏&#xff0c;google为…...

rust每日一库 rand 生成随机数

文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值 rust中官方并没有像以他语言一样&#xff0c;rust并没有官方并没有提供生成随机数的工具&#xff0c;所以我们要借助rand包…...

Unity SRP 管线【第三讲:URP 光照】

3.2.3 以前属于Shader部分&#xff0c;Shader部分不进行讲解。 这里只涉及Unity内部管线的设置问题。 文章目录 3.2.3 向GPU发送灯光数据设置光源数据设置主光源设置额外点光源 Shader中的数据 3.2.3 向GPU发送灯光数据 在UniversalRenderPipeline.cs > RenderSingleCamera…...

怎么更新BI报表数据?问我就对了

BI大数据分析工具上有大量的BI报表模板&#xff0c;这些模板都是一个个完整的BI报表&#xff0c;只需将数据源更换&#xff0c;立即就能用来分析我们自己的数据。那&#xff0c;BI报表的数据怎么更新&#xff1f;接下来就来说说这事。 目的&#xff1a;更新BI报表数据 工具&a…...

SpringBoot 入门学习

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2 框架介绍 Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置…...

高等数学零基础篇复习笔记

预备章 零基础高等数学入门知识 第一节 集合、运算与关系 第二节 三角函数与反三角函数 三角函数的公式 反三角函数 第三节 常见不等式及数列 划重点 第一章 函数、极限与连续 第一节 函数及函数的初等特性 特殊函数 反函数 函数的初等特性 ①有界性 ②奇偶性 偶函数图像…...

CentOS 系列:CentOS 7文件系统的组成

CentOS 7文件系统的组成 文件系统的组成Linux的一些重要目录文件和目录名主机名文件权限绝对路径和相对路径绝对路径相对路径 文件系统的组成 一切从根开始 文件路径中只有第一个/是根目录&#xff0c;后面的/是分隔符 文件名区分大小写 除斜线(/)以外&#xff0c;其他的字符…...

String转Date,Date转String

源码&#xff1a; Date currentTime new Date();System.out.println("currentTime:"currentTime);SimpleDateFormat formatter new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString formatter.format(currentTime);System.out.println(&quo…...

大坝安全监测的内容及作用

大坝安全监测是指对大坝水雨情沉降、倾斜、渗压以及大坝形状特征有效地进行监测&#xff0c;及时发现潜在的安全隐患和异常情况&#xff0c;以便大坝管理人员能够做出科学决策&#xff0c;以确保大坝安全稳定运行。 大坝安全监测的主要内容 1.表面位移监测&#xff1a;监测大坝…...

Maven——Maven发展历程

本帖主要介绍以下内容&#xff1a; 什么是Maven为什么需要MavenMaven与极限编程 1、什么是Maven Maven这个词可以翻译为“知识的积累”&#xff0c;也可以翻译为“专家”或“内行”。Maven是跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目&#xff0c;Mav…...

Python与设计模式--迭代器模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

【NGINX--8】HTTP/2

1、基本配置 想要利用 HTTP/2。 在 NGINX 服务器上启用 HTTP/2&#xff1a; server {listen 443 ssl http2 default_server;ssl_certificate server.crt; ssl_certificate_key server.key;# ... }详解 要启用 HTTP/2&#xff0c;您只需要将 http2 参数添加到 listen 指令即可…...

webpack项目工程初始化

一、初始化项目 默认系统已经安装node //初始化 pnpm init//安装webpack pnpm i -D webpack webpack-cli 新建一个index.html的入口文件 新建一个src文件存放js代码&#xff0c;src里面新建一个index.js package.josn配置打包命令 {"name": "webpack-cs&q…...

08-学成在线项目中统一异常处理的规范

项目中的异常处理 规范异常类型 在Service类的业务方法中有很多的参数合法性校验,当请求参数不合法的时候会抛出异常,但此时异常信息只会在控制台输出,前端界面并不会提示用户 实际开发中前端和后端需要做一些约定: 一般将错误提示信息统一以json格式返回给前端,以HTTP状态码…...

解析生效探测方法

linux dig命令 1.最常用的查询命令 dig baidu.com2 . 根据记录类型进行查询&#xff0c;比如MX&#xff0c;CNAME&#xff0c;NS&#xff0c;PTR等&#xff0c;只需将类型加在命令后面即可。 dig a.shifen.com ns3 . 指定域名DNS服务器测试解析是否生效的命令&#xff0c;以…...

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷11

单选题 1、在阅读文章和接受信息时注意区分事实和观点十分重要。事实&#xff08;或称为命题&#xff09;不同于观点的一个主要特征是 A、可以被证实或证伪 B、是准确无误的 C、是正式的表达 D、表达了个人看法 答案&#xff1a;A 2、现代意义的知识产权是在多数国家都受…...

视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…...

Spring Boot + MyBatis-Plus实现数据库读写分离

文章目录 1. 引言2. MyBatis-Plus简介3. 准备工作4. 配置数据源5. 配置MyBatis-Plus6. 创建实体类和Mapper接口7. 编写Service8. 控制器层9. 测试10. 数据库读写分离的原理11. 拓展11.1. 动态数据源11.2. 多数据源事务管理11.3. 多租户支持 12. 总结 &#x1f389;Spring Boot …...

数据同步异常处理,数据同步重试机制(Java)

一、应用场景 在数据同步时&#xff0c;偶尔会出现代码异常之外的问题。例如网络异常、服务器断电… 如果在以上异常片段中&#xff0c;原始数据库新增了一批数据&#xff0c;同步数据库则会丢失这部分数据 二、实现思路 为了解决以上问题&#xff0c;保证原始数据库操作的每…...

STM32F407-14.3.5-01捕获_比较通道

捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器)&#xff0c; 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…...

没有后台服务的鸿蒙应用,算不算“半成品”?——本地 Service Extension 开发真香指南!

大家好&#xff0c;我是[晚风依旧似温柔]&#xff0c;新人一枚&#xff0c;欢迎大家关注~ 本文目录&#xff1a;前言一、ExtensionAbility 类型&#xff1a;先搞清“职业分工”&#xff0c;再谈用谁干活1️⃣ ExtensionAbility 大家族速览二、后台服务场景&#xff1a;哪些事儿…...

Linux路由表中那个神秘的0.0.0.0:默认网关配置全解析

Linux路由表中0.0.0.0的奥秘&#xff1a;从默认网关到高级路由策略 当你第一次在Linux系统的路由表中看到0.0.0.0这个特殊地址时&#xff0c;是否也曾感到困惑&#xff1f;这个看似简单的地址背后&#xff0c;隐藏着网络通信中最基础也最重要的机制之一——默认路由。作为系统管…...

TS初相识

目录 前言&#xff1a; 关于TS 使用TS之前的环境搭配 TS的数据类型 number string null&undefined 根类型 数组类型 元组 函数类型 前言&#xff1a; js的缺点 错误出现的时机靠后 数据类型并不是连续的内存空间 js没有类型检测机制&#xff08;弱类型&#…...

保姆级教程:用Python+Pytorch复现MSCNN-1D模型,搞定CWRU轴承故障诊断(附完整代码)

从零实现MSCNN-1D&#xff1a;Python实战轴承故障诊断全流程解析 轴承作为工业设备的核心部件&#xff0c;其健康状态直接影响生产安全。传统诊断方法依赖专家经验&#xff0c;而基于深度学习的智能诊断技术正成为行业新标准。本文将手把手带你用Python和PyTorch实现MSCNN-1D模…...

为什么PyTorch基金会突然终止3个核心子项目?——2026奇点大会技术委员会首次披露AI原生开源治理白皮书(含5项强制合规条款)

第一章&#xff1a;PyTorch基金会治理突变事件全景速览 2026奇点智能技术大会(https://ml-summit.org) 2024年12月&#xff0c;PyTorch基金会宣布启动治理架构重大调整&#xff0c;标志着其从Meta主导的项目向真正中立、多利益相关方共治的开源基金会转型。此次变更并非渐进式…...

5分钟解锁B站缓存视频:m4s-converter让你的收藏永不消失

5分钟解锁B站缓存视频&#xff1a;m4s-converter让你的收藏永不消失 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾有过这样的经历&…...

武昌区文化墙设计制作一体

在城市发展进程中&#xff0c;文化墙作为一种独特的文化传播载体&#xff0c;正发挥着越来越重要的作用。武昌区作为历史文化名城的核心区域&#xff0c;通过文化墙设计制作一体化的方式&#xff0c;不仅能够展现区域特色文化&#xff0c;还能提升城市形象和居民的文化认同感。…...

Keil UV4配色进阶:不止替换文件,教你用global.prop打造专属高效编码环境

Keil UV4深度调校指南&#xff1a;从global.prop解析到现代IDE级编码环境定制 当你每天面对Keil UV4那个灰暗的默认界面时&#xff0c;是否想过这个老牌嵌入式开发工具也能拥有VS Code般的优雅体验&#xff1f;不同于简单的主题替换&#xff0c;我们将深入global.prop文件的每一…...

如何快速安装Jasminum插件:中文文献管理终极解决方案

如何快速安装Jasminum插件&#xff1a;中文文献管理终极解决方案 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为中文文献管…...

小程序在企业数字化转型中的作用是什么?

小程序在企业数字化转型中的作用是什么&#xff1f;一、核心结论小程序在企业数字化转型中的核心作用&#xff0c;不是简单的“线上工具”&#xff0c;而是连接用户、业务与数据的轻量化入口。它通过降低使用门槛与缩短业务路径&#xff0c;使企业能够更高效地完成获客、转化与…...