超简单的几行代码搞定Android底部导航栏功能

作者:AND_Devil 时间:2022-08-03 09:26:56 

超简单,几行代码搞定Android底部导航栏—–应项目需求以及小伙伴的留言,新加了两个方法:

  • 设置底部导航栏背景图片

  • 添加底部导航栏选项卡切换监听事件

底部导航栏的实现也不难,就是下边是几个Tab切换,上边一般是一个FrameLayout,然后FrameLayout中切换fragment。

网上有不少关于Android底部导航栏的文章,不过好像都只是关于下边Tab切的,没有实现Tab与fragment的联动,用的时候还要自己手写这部分代码,对我这个比较懒(据说,懒是程序员的一种美德_#)得程序员来说,这是不能忍的。

下边就来说说我的BottomTabBar吧。

超简单的几行代码搞定Android底部导航栏功能

这就是我以前封装过的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_backgroundBottomTabBar的整体背景颜色
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

标签:android,导航栏
0
投稿

猜你喜欢

  • android倒计时控件示例

    2022-12-01 05:34:53
  • java,android,MD5加密算法的实现代码(16位,32位)

    2022-07-12 20:40:10
  • Java实现Timer的定时调度函数schedule的四种用法

    2022-08-14 04:49:01
  • c#调用vc写的ocx控件示例

    2021-09-26 19:34:00
  • java简单实现复制 粘贴 剪切功能代码分享

    2023-10-14 05:08:23
  • Springboot引用外部配置文件的方法步骤

    2022-06-14 13:29:35
  • C#浅拷贝和深拷贝实例解析

    2022-09-03 02:31:05
  • windows系统配置Java开发环境变量

    2022-03-07 23:28:07
  • C#实现影院售票系统

    2021-12-27 00:53:26
  • JAVA抽象类,接口,内部类详解

    2023-11-09 16:37:25
  • C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法

    2023-07-15 21:35:09
  • Java动态代理四种实现方式详解

    2022-03-12 02:16:38
  • Android实现左右滑动切换图片

    2021-06-20 10:51:30
  • 深入理解Java对象复制

    2021-10-06 05:39:27
  • C#实现Datatable排序的方法

    2022-12-30 11:31:52
  • 基于C#实现乱码视频效果

    2022-01-25 14:29:56
  • Android服务Service教程

    2022-02-19 13:05:40
  • 一篇文章读懂Java哈希与一致性哈希算法

    2022-09-13 06:15:16
  • Android蓝牙通信编程

    2023-06-24 04:37:48
  • Android实现画板、写字板功能(附源码下载)

    2021-11-01 17:40:56
  • asp之家 软件编程 m.aspxhome.com