热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了超简单的几行代码搞定Android底部导航栏功能,需要的朋友可以参考下

超简单,几行代码搞定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文件代码:

简单吧,就这么一个控件就可以了。

当然,你要是想进行一些属性设置的话,需要加上命名空间

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文件里设置

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的时候需要注意一下。

下边是一些方法的使用,都加了注释了

 /**
   * 设置图片的尺寸
   * 

* 此方法必须在addTabItem()之前调用 * * @param width 宽度 px * @param height 高度 px * @return */ setImgSize(float width, float height) /** * 设置文字的尺寸 *

* 此方法必须在addTabItem()之前调用 * * @param textSize 文字的尺寸 sp * @return */ setFontSize(float textSize) /** * 设置Tab的padding值 *

* 此方法必须在addTabItem()之前调用 * * @param top 上边距 px * @param middle 文字图片的距离 px * @param bottom 下边距 px * @return */ setTabPadding(float top, float middle, float bottom) /** * 设置选中未选中的颜色 *

* 此方法必须在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底部导航栏功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文深入探讨了 com.example.android.sunshine.data.TestUtilities 中 validateThenCloseCursor() 方法的使用方法及其代码示例,旨在帮助开发者更好地理解和应用该方法。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
author-avatar
123454ewefewf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有