Android 底部导航栏中间凸起、动态配置替换底部导航栏Tab图标(按钮、标签)的实现方案

本文主要是介绍Android 底部导航栏中间凸起、动态配置替换底部导航栏Tab图标(按钮、标签)的实现方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标签:底部导航栏中间凸起、动态配置底部导航、底部导航中间大圆圈

类似 京东 淘宝 等app,在一些节假日的时候,首页UI 一般都是配置的节日气息很浓重,这类的实现一般是不需要发版,思路是 由后台直接配置,第一次开启App后台下载,在下次打开时 直接展示下载的图标。

思路分析 一般默认 一套普通图标平日展示使用, 后台下载一套新的图标,固定时间段展示使用。

 

比如 淘宝

 

 

假设下面这个是节日展示的底部导航

 

 

实现原理:

1.开启应用 ,后台下载活动图标。

2.下次打开应用,检测是否要展示。

3.底部导航实现,这里以RadioButton 为例, RadioButton 自带选中和默认 两种状态,所以只要我们将下载下来的图标做成selector选择器设置给RadioButton , 我们就可以实现替换图标的需求。

实现分析细节补充:

1. 启动页 请求后台图标接口,判断后台下载图标。

2.启动时, 检测下载图标是否完整,一定要下载完全,如果不完整,则展示出现问题,需要重新下载。

3.如果已经下载到本地,并且校验符合条件,则  加载本地图标生成Drawable,然后设置给Selector,然后将Selector 添加到 相应的RadioButton 上面。

圖片的下載比較容易,不做介紹,只介紹生成select部分:

 

//代碼生成Selector
StateListDrawable drawable = new StateListDrawable();drawableDefault = new BitmapDrawable(bitmap);drawableChecked);= new BitmapDrawable(bitmap);drawable.addState(new int[]{android.R.attr.state_checked},drawableChecked);
drawable.addState(new int[]{ - android.R.attr.state_checked},drawableDefault);// 將生成的Selector 添加到RadioButton 上面
drawable.setBounds(0,0,DimenUtil.dipToPx(context,30),DimenUtil.dipToPx(context,30));
radioButton.setCompoundDrawables(null,drawable,null,null);


下面是效果展示:

 

 

 

 

 

 

 

 

 

 

https://github.com/CodingForAndroid/AutoBottomBar

 

 谢谢认真观读本文的每一位小伙伴,衷心欢迎小伙伴给我指出文中的错误,也欢迎小伙伴与我交流学习。

[点击链接加入群聊【编程之美】: https://jq.qq.com/?_wv=1027&k=h75BfFCg](https://jq.qq.com/?_wv=1027&k=h75BfFCg)

 

 

这篇关于Android 底部导航栏中间凸起、动态配置替换底部导航栏Tab图标(按钮、标签)的实现方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066540

相关文章

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC