超简单的几行代码搞定Android底部导航栏功能
作者:AND_Devil 发布时间:2022-08-03 09:26:56
超简单,几行代码搞定Android底部导航栏—–应项目需求以及小伙伴的留言,新加了两个方法:
设置底部导航栏背景图片
添加底部导航栏选项卡切换监听事件
底部导航栏的实现也不难,就是下边是几个Tab切换,上边一般是一个FrameLayout,然后FrameLayout中切换fragment。
网上有不少关于Android底部导航栏的文章,不过好像都只是关于下边Tab切的,没有实现Tab与fragment的联动,用的时候还要自己手写这部分代码,对我这个比较懒(据说,懒是程序员的一种美德_#)得程序员来说,这是不能忍的。
下边就来说说我的BottomTabBar吧。
这就是我以前封装过的BottomTabBar的效果图,现在就从这张效果图开始,先分析一下,都需要设置那些参数吧。
1、BottomTabBar的整体背景
虽然一般这里都是用白色或者接近白色的浅色调作为背景,但我们也不能给他固定死,要提供这样的一个方法,让使用者可以把背景设置成任何的颜色。
2、图片
这里不仅要传入一个图片,还要做图片做一些设置:
图片的宽高尺寸(这个也需要对外设置一个方法)
图片得设置居中,这个直接固定写死就好了,我见过的应用都是设置居中的,没见过别的情况,个人感觉,不设置居中也不美观啊
3、 文字
与图片类似,文字也需要做一些设置:
文字的大小
文字也是需要设置居中的,也像图片一样固定写死
4、 颜色
文字和图片的颜色都是只有两种,一种是选中状态下的,一种是未选中的,我们可以在这里统一设置,提供一个方法就可以了
5、边距
这里需要设置三个地方的边距:
Top边距,也就是图片与上边分割线的距离
middle边距,也就是图片与文字的距离
Bottom边距,也就是文字与底部的距离
6、分割线
上边说到了,图片上边需要设置分割线,当然,这只是部分使用者需要设置的,所以我们需要提供一个方法,用来设置是否显示分割线。此外还要设置分割线的高度以及其背景颜色
7、fragment
我这个BottomTabBar既然是要与fragment联动的,所以必须要传入一个fragment
大体的参数就是需要这些了,下面上代码:
GitHub代码连接
用法也简单,就像标题说的几行代码就可以搞定:
引用方式:
compile 'com.hjm:BottomTabBar:1.0.0'
1. 首先是XML文件代码:
<com.hjm.bottomtabbar.BottomTabBar
android:id="@+id/bottom_tab_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
简单吧,就这么一个控件就可以了。
当然,你要是想进行一些属性设置的话,需要加上命名空间
xmlns:hjm="http://schemas.android.com/apk/res-auto"
下面就开始详细的解释一下每个参数的含义以及用法:
参数名 | 涵义 |
---|---|
tab_bar_background | BottomTabBar的整体背景颜色 |
tab_img_width | 图片宽度 |
tab_img_height | 图片高度 |
tab_font_size | 文字尺寸 |
tab_padding_top | 上边距 |
tab_img_font_padding | 图片文字间隔 |
tab_padding_bottom | 下边距 |
tab_isshow_divider | 是否显示分割线 |
tab_divider_height | 分割线高度 |
tab_divider_background | 分割线背景 |
tab_selected_color | 选中的颜色 |
tab_unselected_color | 未选中的颜色 |
这些参数可以指接在XML文件里设置
<com.hjm.bottomtabbar.BottomTabBar
android:id="@+id/bottom_tab_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
hjm:tab_divider_background="#FF0000"
hjm:tab_divider_height="5dp"
hjm:tab_font_size="6sp"
hjm:tab_img_font_padding="0dp"
hjm:tab_img_height="30dp"
hjm:tab_img_width="30dp"
hjm:tab_isshow_divider="true"
hjm:tab_padding_bottom="5dp"
hjm:tab_padding_top="8dp"
hjm:tab_selected_color="#000000" hjm:tab_unselected_color="@color/colorPrimary" />
2. Activity文件代码:
mBottomTabBar = (BottomTabBar) findViewById(R.id.bottom_tab_bar);
mBottomTabBar.init(getSupportFragmentManager())
.addTabItem("第一项", R.mipmap.ic_launcher, OneFragment.class)
.addTabItem("第二项", R.mipmap.ic_launcher, TwoFragment.class)
.addTabItem("第三项", R.mipmap.ic_launcher, ThreeFragment.class)
.addTabItem("第四项", R.mipmap.ic_launcher, FourFragment.class);
也很简单,是吧。
这里简单的提一句,这个init ( getSupportFragmentManager() )
方法一定要第一个调用,没有这个初始化,后边什么也做不了。
或许大家也看出来了,这个init()方法里,我们需要传入一个FragmentManager,而且还是V4包下的,所以,在使用Activity的时候需要注意一下。
下边是一些方法的使用,都加了注释了
/**
* 设置图片的尺寸
* <p>
* 此方法必须在addTabItem()之前调用
*
* @param width 宽度 px
* @param height 高度 px
* @return
*/
setImgSize(float width, float height)
/**
* 设置文字的尺寸
* <p>
* 此方法必须在addTabItem()之前调用
*
* @param textSize 文字的尺寸 sp
* @return
*/
setFontSize(float textSize)
/**
* 设置Tab的padding值
* <p>
* 此方法必须在addTabItem()之前调用
*
* @param top 上边距 px
* @param middle 文字图片的距离 px
* @param bottom 下边距 px
* @return
*/
setTabPadding(float top, float middle, float bottom)
/**
* 设置选中未选中的颜色
* <p>
* 此方法必须在addTabItem()之前调用
*
* @param selectColor 选中的颜色
* @param unSelectColor 未选中的颜色
* @return
*/
setChangeColor(@ColorInt int selectColor, @ColorInt int unSelectColor)
/**
* 设置BottomTabBar的整体背景
*
* @param color 背景颜色
* @return
*/
setTabBarBackgroundColor(@ColorInt int color)
/**
* 是否显示分割线
*
* @param isShowDivider
* @return
*/
isShowDivider(boolean isShowDivider)
/**
* 设置分割线的高度
*
* @param height
* @return
*/
setDividerHeight(float height)
/**
* 设置分割线的颜色
*
* @param color
* @return
*/
setDividerColor(@ColorInt int color)
/**
* 添加TabItem
*
* @param name 文字
* @param drawable 图片
* @param fragmentClass fragment
* @return
*/
addTabItem(String name, Drawable drawable, Class fragmentClass)
值得注意的是前四个方法必须在addTabItem()
之前调用,如果放在addTabItem()
之后调用的话,就没有任何的效果了。
正确用法如下:
mBottomTabBar.init(getSupportFragmentManager())
.setImgSize(50,50)
.setFontSize(8)
.setTabPadding(4,6,10)
.setChangeColor(Color.DKGRAY,Color.RED)
.addTabItem("第一项", R.mipmap.ic_launcher, OneFragment.class)
.addTabItem("第二项", R.mipmap.ic_launcher, TwoFragment.class)
.addTabItem("第三项", R.mipmap.ic_launcher, ThreeFragment.class)
.addTabItem("第四项", R.mipmap.ic_launcher, FourFragment.class)
.setTabBarBackgroundColor(Color.WHITE)
.isShowDivider(false);
总结
以上所述是小编给大家介绍的超简单的几行代码搞定Android底部导航栏功能网站的支持!
来源:http://blog.csdn.net/qq_40543575/article/details/79454367


猜你喜欢
- #include<iostream>#include<assert.h>using namespace std;st
- 前言上一篇博客内容对 RecyclerView 回收复用机制相关源码进行了分析,本博客从自定义 View 三大流程 measure、layo
- mybatis-plus想要修改某字段为null问题场景使用mybatis + mybatisPlus进行修改某字段,想要将其设为null,
- 前言这似乎是 Reactor 的热门搜索之一,至少当我在谷歌中输入 onErrorContinue 时,onErrorResume 会在它旁
- 最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地
- 一、过滤器(filter)过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求和响应都要通过过
- 现实开发中,我们难免遇到跨域问题,以前笔者只知道jsonp这种解决方式,后面听说spring只要加入@CrossOrigin即可解决跨域问题
- 图库在播放幻灯片时,按power键灭屏,然后再亮屏,会发现幻灯片继续在播放,没有显示keyguard。如何在亮屏后显示解锁界面。 修改方法是
- 一、ViewPageIndicator开源框架的基本用法 我们先得去Github上面下载这个库,下载地址:https://github.co
- 一.安装在 IDEA(2019)的 setting 的 Plugins 的 Marketplace 中搜索 leetcode,即可以找到该插
- C++中,对于任意一个类,都会为我们提供4个默认的成员函数(如果我们不显示的去声明)——构造函数、析
- Spring是什么?Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其
- java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这
- 本文实例讲述了C#编程简单实现生成PDF文档的方法。分享给大家供大家参考,具体如下:using System;using System.IO
- pageHelper是一个非常方便实用的 Java 分页插件,可以轻松实现数据库分页查询。而在一对多的情况下,如果要实现主表和从表的联合分页
- 本例子演示如何添加一个简单的单页导航,在此基础上,再演示如何在第2个页面中显示第1个页面中拨打过的所有电话号码。(1)通过该例子理解Andr
- 引言:在使用循环的时候,循环里面带有break、continue、return的时候经常弄混,今天特意整理了下,以待后用... f
- 这篇文章主要介绍了mybatis insert返回主键代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 使用@Indexed加快启动速度Spring读取@Component组件(派生性),有两种实现方式,一种是反射,一种是ASM。反射性能低主要
- 先看一段同步代码:public int SumPageSizes(IList<Uri> uris) {