• Stars
    star
    142
  • Rank 258,495 (Top 6 %)
  • Language
    Java
  • Created about 6 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🔥空祖家的导航栏工具

Kongzue Tabbar

Kongzue Tabbar是一款简单的底部导航栏组件,仅需要简单配置即可满足绝大多数需要使用导航栏的场景。

Kongzue Tabbar jCenter jitpack License Homepage

Demo预览图如下:

Tabbar

优势

  • 无需两份图!每个 TabIcon 仅需一份颜色的图即可,Tabbar 会根据您设置的颜色自动叠加颜色!

  • 易于上手,快速创建,满足绝大多数导航栏使用场景。

  • 简单的方式就可以实现未读角标提醒。

Demo

可通过 http://beta.kongzue.com/Tabbar 下载试用

引入

AndroidX 版本:

  1. 先在 build.gradle(project) 中找到 allprojects{} 代码块添加:
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  1. 进入 build.gradle(app) 在 dependencies{} 中添加引用:

latest.release =

implementation 'com.github.kongzue:Tabbar:latest.release'

Support 版本

请注意,因 jCenter 停止服务支持以及 Support 支持库的维护关系,Support 版本不再进行更新,建议尽早升级至 AndroidX 版本,最后的 Support 版本引入方式:

从 Maven 仓库或 jCenter 引入:

Gradle:

在dependencies{}中添加引用:

implementation 'com.kongzue.tabbar:tabbar:1.5.4.1'

Maven仓库:

<dependency>
  <groupId>com.kongzue.tabbar</groupId>
  <artifactId>tabbar</artifactId>
  <version>1.5.4</version>
  <type>pom</type>
</dependency>

使用方法

  1. 从XML布局文件创建:
<com.kongzue.tabbar.TabBarView xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tabbar"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    app:focusColor="#3e78ed"
    app:iconPadding="2dp"
    app:normalColor="#606060"
    app:textSize="12dp"
    app:tabPaddingVertical="5dp"
    app:paddingNavigationBar="false"/>

其中各属性解释如下:

字段 含义 默认值
focusColor 处于焦点状态的颜色 #3e78ed
normalColor 处于普通状态的颜色 #606060
iconPadding 图标内边距 5dp
textSize 文本字号 12dp
tabPaddingVertical tab按钮上下内边距 5dp
tabClickBackground tab按钮按下效果 ripple
paddingNavigationBar 是否开启底部导航栏沉浸式 false
noDyeing 禁止染色 false
noSelect 禁止选择 false
splitLine 分隔线 resId
unreadBackground 未读消息小红点背景 resId

也可通过set方法设置:

tabbar = findViewById(R.id.tabbar);

tabbar.setFocusColor(Color.rgb(62, 120, 238));                              //处于焦点状态的颜色
tabbar.setNormalColor(Color.rgb(96, 96, 96));                               //处于普通状态的颜色
tabbar.setTextSize(dp2px(12));                                              //文本字号
tabbar.setIconPadding(dp2px(5));                                            //图标内边距
tabbar.setTabPaddingVertical(dp2px(5));                                     //tab按钮上下内边距
tabbar.setTabClickBackground(TabBarView.TabClickBackgroundValue.RIPPLE);    //tab按钮按下效果

//从 1.4 版本起,新增两个新的选项:
tabbar.setNoSelect(false);                                                  //是否禁止选择效果
tabbar.setNoDyeing(false);                                                  //是否禁止颜色渲染
  1. 创建Tab:

首先需要创建一个 List 用来存放Tab数据:

List<Tab> tabs = new ArrayList<>();
tabs.add(new Tab(this, "首页", R.mipmap.img_maintab_home));
tabs.add(new Tab(this, "联系人", R.mipmap.img_maintab_contacts));
tabs.add(new Tab(this, "我的", R.mipmap.img_maintab_me));

然后将它们设置到 Tabbar 即可:

tabbar.setTab(tabs);

完成!

额外的说明

Tab 的创建(构造)方式

Tab 支持多种构建方式:

new Tab(this, "首页", R.mipmap.img_maintab_home)      //使用资源文件创建
new Tab("首页", bitmap);                              //使用 Bitmap 位图创建
new Tab("首页", drawable);                            //使用 drawable 创建

Tab 亦支持 get、set 方法,可以通过他们设置属性值。

其次,关于 Tab 字段的说明:

字段 含义 是否必须
name Tab 标签名称
icon Tab 图标

按钮点击监听

可通过以下代码设置监听

tabbar.setOnTabChangeListener(new OnTabChangeListener() {
    @Override
    public void onTabChanged(int index) {
        Log.i(">>>", "onTabChanged: " + index);
    }
})

其中,index 即当前点击了哪个按钮的索引号。

设置默认焦点按钮:

可通过以下代码设置设置默认焦点按钮:

tabbar.setNormalFocusIndex(index);

其中,index 即要设置为焦点的按钮的索引号。

当前提供三种 Tab 按钮按下效果:

字段 含义 是否默认
ripple 默认矩形水波纹效果
rippleOutside 外弧形水波纹效果
gray 纯灰色

具体表现效果如下:

TabbarClick

关于沉浸式

当您设置开启沉浸式时可能会出现 Tabbar 被底部按键导航栏(NavigationBar)遮挡的问题,此时开启 paddingNavigationBar 即可解决此问题。设置方法为:

在XML布局中:

app:paddingNavigationBar = "true"

开启后,Tabbar会自动设置一段 paddingBottom 边距以适应底栏高度。

启用未读角标

在您创建一个Tab的时候,可以为其设置角标。

TabbarUnread

例如:

new Tab(this, "联系人", R.mipmap.img_maintab_contacts).setUnreadNum(123).setMaxUnreadNum(99);

其中,UnreadNum 为角标数字,值为 0 时隐藏角标,为负数时不显示数字只显示一个红点,当 UnreadNum 超过 MaxUnreadNum 的值时会显示为 MaxUnreadNum+,例如上边的示例会显示为“99+”

也可通过代码动态设置未读数量角标:

//参数:(第几个Tab, 未读数量)
tabbar.setUnreadNum(2, 123);
//备注:可通过设置未读数量为 0 来清除角标。

禁用选择和禁用染色

1.4 版本起,新增了禁止选择(noSelect)和禁止颜色渲染(noDyeing)的选项,其目的是使 Tabbar 能够有更为广泛的应用场景,其中典型的场景为电商的分类选择,如下图所示:

TabbarUnread

您可以通过 XML 布局文件中直接设置这些属性:

<com.kongzue.tabbar.TabBarView
    android:id="@+id/selectTabbar"
    android:layout_width="match_parent"
    android:layout_height="65dp"
    app:iconPadding="2dp"
    app:noDyeing="true"
    app:noSelect="true"
    app:normalColor="#606060"
    app:paddingNavigationBar="false"
    app:tabClickBackground="empty"
    app:tabPaddingVertical="5dp"
    app:textSize="12dp" />

也可以通过代码设置:

tabbar.setNoSelect(false);
tabbar.setNoDyeing(false);

二套图支持

Tabbar2Type

若您的设计师提供了两套完全不一样的 Tab 图标,即选中状态下显示的图标和非选中时显示的图标完全不同,不可以通过一套图染色的方式实现,可参考本章节提供的方法:

首先,在 XML 中创造布局:

<com.kongzue.tabbar.TabBarView
    android:id="@+id/tabTwoType"
    android:layout_width="match_parent"
    android:layout_height="58dp"
    app:focusColor="#f14961"                        ← 此处为选中时文字的颜色
    app:iconPadding="2dp"
    app:normalColor="#a2a2a2"                       ← 此处为非选中时文字的颜色
    android:background="#fff"
    app:noDyeing="true"                             ← 设置为图标非染色模式
    app:paddingNavigationBar="false"
    app:tabClickBackground="ripple"
    app:tabPaddingVertical="3dp"
    app:textSize="12dp" />

接下来在代码中为 Tabbar 添加内容:

List<Tab> tabs2 = new ArrayList<>();
tabs2.add(new Tab(this, "首页", R.mipmap.tab2_home_off).setFocusIcon(this,R.mipmap.tab2_home_on));            //使用 setFocusIcon(bitmap/drawable/resId) 来添加选中时的第二套图标
tabs2.add(new Tab(this, "消息", R.mipmap.tab2_message_off).setFocusIcon(this,R.mipmap.tab2_message_on);
tabs2.add(new Tab(this, "我的", R.mipmap.tab2_me_off).setFocusIcon(this,R.mipmap.tab2_me_on));
tabTwoType.setTab(tabs2);

完成!

分隔线

从 1.5.3 版本起支持了分割线功能,可设置属性来启用:

app:splitLine="@drawable/split_line"

如果只需要颜色来填充分隔线,可以在属性中引用您的颜色,注意不可以设置16进制的颜色值,只能引用属性设置:

app:splitLine="@color/colorAccent"

若您需要制作一个上下有间距的分隔线,可以创建一个 drawable 的 XML 文件,以下是范例 split_line.xml:

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetTop="5dp"
    android:insetBottom="5dp"
    android:drawable="@color/colorAccent">
</inset>

完成效果如图所示: Tabbar2Type

开源协议

Copyright Tabbar

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

更新日志

v1.5.4.1(测试版本):

  • 修复bug;

v1.5.4:

  • 修复了获取导航栏高度值错误的问题;
  • 新增未读表计小红点属性设置 unreadBackground;

v1.5.3:

  • 新增方法 setUnreadNum(index, unreadNum) 用以直接设置未读数量;
  • 新增方法 getChild(index) 可以直接获取对应子按钮;
  • 新增属性 splitLine 可以设置分隔线;
  • 修复未读数量红点可能出现的位置显示 bug;

v1.5.2:

  • 修复在 Android 5.1.1 版本上的染色兼容问题 × 2;

v1.5.1:

  • 修复在 Android 5.1.1 版本上的染色兼容问题;

v1.5:

  • 新增二套图支持;

v1.4:

  • 新增支持禁止选择(noSelect)和禁止颜色渲染(noDyeing)的选项;

v1.3:

  • 支持角标显示;

v1.2:

  • 修复bug;
  • 新增属性 paddingNavigationBar 底栏沉浸式开关(具体请参照文档);

v1.1:

  • 新增属性 “tabClickBackground” 控制按下的不同效果;
  • 新增部分注释;

More Repositories

1

DialogX

💬 DialogX dialog box component library, easy to use, more customizable, more scalable, easy to achieve a variety of dialog boxes. DialogX对话框组件库,更加方便易用,可自定义程度更高,扩展性更强,轻松实现各种对话框、菜单和提示效果,更有Material You、iOS、MIUI等主题扩展可选
Java
1,809
star
2

DialogV3

🔥空祖家的对话框工具V3版,集成三种风格+夜间模式对话框,以及等待、提示、分享等特色对话框,支持花式自定义
Java
1,258
star
3

Dialog

🔥空祖家的对话框工具
Java
733
star
4

StackLabel

🔥空祖家的堆叠标签(以下碎念:一开始起名字“StackLabel”没想太多结果被人吐槽Stack是整齐堆叠的意思...........好吧这是我的锅不过现在要改也来不及了,好用就行了...吧?
Java
533
star
5

BaseFramework

🔥BaseFramework是一款基础适配框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App
Java
467
star
6

BaseOkHttpV3

🔥OkHttp的二次封装库,提供各种快速使用方法以及更为方便的扩展功能。提供更高效的Json请求和解析工具以及文件上传下载封装,HTTPS和Cookie操作也更得心应手。
Java
202
star
7

DialogXSample

DialogX 计划提供模块扩展包库 这个库目的在于实现一些常用的模块功能,例如BottomDialog+地址选择、日期选择、分享对话框等半实现功能,你可以选择性的引入部分模块,配合DialogX完成功能的构建
Java
120
star
8

KongzueUpdateSDK

🔥Kongzue的App更新框架
Java
93
star
9

BTLinker

🔥空祖家的蓝牙连接封装库,适用于智能硬件蓝牙通讯
Java
69
star
10

WifiLinker

🔥空祖家的Wifi连接封装库,适用于智能硬件Wifi连接通讯
Java
61
star
11

EnjoyLife

😊开源App项目,每天一张精选倩图、一个精选小视频,一篇知乎美文
Java
45
star
12

TakePhoto

🔥Kongzue的APP拍照&相册选择工具
Java
43
star
13

WechatHelper

🔥微信 SDK 辅助组件,提供登录、支付和分享三个模块
Java
39
star
14

BaseJson

改进型 Json 解析库,快速解析 Json 为 Map 或 List 对象,甚至直接由 JsonList 创建列表可用的适配器。
Java
37
star
15

TitleBar

🔥空祖家的标题栏组件
Java
36
star
16

DBV3

🔥KongzueDB是对SQLite的封装,打通与 Json 的互转,适合轻量使用数据库的场景,半自动化快速创建表结构
Java
32
star
17

Notes

😊开源App项目,「记」——摒除杂质,专注创作
Java
31
star
18

OnePlusOxygenBusCardJumper

【闲的没事系列】用于一加7Pro氧OS调起公交卡的小工具
Java
25
star
19

HolderView

🔥用于加载过程、加载异常、加载失败、空数据的占位布局
Java
25
star
20

Runner

Kongzue Runner 旨在快速完成 App 逻辑构建,协助开发者低成本完成业务开发。提供一个独立的消息事件传递总线,不依赖 Intent 可以独立传递数据、执行事件,提供一套近乎全自动化的 ViewModel 框架,能够依据数据和 View 的对应关系自动实现数据绑定和界面适配
Java
20
star
21

UpdateUI

🔥Kongzue的App更新UI框架
Java
17
star
22

CameraXQRDecoder

此库是基于 CameraX 的二维码扫描封装、仅含基础功能(扫码、闪光灯),不包含扫码框动画,如有需要请自行实现。目的是解决以往原始 Camera 实现的扫码再较长屏幕设备上可能出现因画面纵向被拉伸导致识别率低的问题,相比于传统的 Camera,CameraX 的优势更大,启动速度响应速度都更快。
Java
17
star
23

BaseOkHttp

🔥OkHttp的二次封装,更好用,更易用,更标准
Java
15
star
24

BaseActivity

🛑Kongzue的适配布局的框架模块(已废弃,请参考https://github.com/kongzue/BaseFramework)
Java
13
star
25

DialogXStyle-Snackbar

适用于 DialogX 框架的 PopTip 组件的 Snackbar 主题包,含亮、暗色
12
star
26

Paywhere

😊花哪儿记账相关资料
HTML
10
star
27

BaseFramework-Support

🔥BaseFramework是一款基础适配框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App,这个库是为了保留最后一个Support版本建立的
Java
10
star
28

BankInfo

💳银行卡号前缀和银行卡名称类型对应关系资料整理
Java
9
star
29

DebugSDK

🚫【已废弃】Kongzue的崩溃日志处理抓取工具,已合并至BaseFramework框架,不再单独更新
Java
9
star
30

ClassSeatChangeDemo

😊帮朋友做的座位调换 Demo
Java
8
star
31

DB

🚫【已废弃】请更新使用DBV3库。KongzueDB是对SQLite的封装,适合轻量使用数据库的场景,半自动化快速创建表结构
Java
7
star
32

lsDirectory

😊雷神通讯录是一款支持小型团队协作的通讯软件
Java
6
star
33

PaywhereSemanticRecognition

😊花哪儿语义识别核心模块
Java
6
star
34

SafeLayout

用来取代fitsSystemWindows的设置安全区的组件,默认实现了SafeFrameLayout、SafeLinearLayout、SafeRelativeLayout和SafeViewGroup
Java
6
star
35

AnalogTouch

😊模拟自动点击的一个APP,需要root权限,支持当机器检测功能
Java
6
star
36

Find

😊《寻》社交APP
Java
4
star
37

BuildingMapView

🛑专业领域使用的自绘地图组件
Java
4
star
38

ToFuture

给未来写封信-公开资料
HTML
3
star
39

Example

😊Kongzue全家桶实现范例
Java
3
star
40

Dome

😊A team transaction synchronization tool that can assign tasks to other members and monitor progress. More features to expand ...
Java
3
star
41

Res

🛑这里没啥东西,真的
2
star
42

Wakeup

😊抬手唤醒APP相关资料库
HTML
2
star
43

kongzue

简介
2
star
44

BaseVolley

🔥Volley的二次封装,更好用,更易用,更标准
Java
2
star
45

BaseFragment

🛑Kongzue的适配布局的框架模块(已废弃,请参考https://github.com/kongzue/BaseFramework)
Java
2
star
46

DialogXDemo

1
star
47

YTGuide

游移通
Java
1
star
48

RefreshLayout

⭐基于SwipeRefreshLayout的改良版
Java
1
star
49

ServletTest

Java
1
star
50

JdbcUtil

Java
1
star
51

Android-Notes

Android开发中遇到的一些坑,已弃,请移驾简书
GCC Machine Description
1
star
52

Preferences

🛑SharedPreferences的简易封装(已废弃,请参考https://github.com/kongzue/BaseFramework)
Java
1
star
53

MagicDayNightSwitchButton

随手照着网上看到的一个视频日夜切换按钮效果的练习作品,用到的技术是 MotionLayout
Java
1
star
54

kongzue.github.io

🚩关于开发的指导性意见,请直接访问 kongzue.github.io
HTML
1
star
55

nowShare

nowshare project
Java
1
star