bottonTabBar实现底部导航
2017-12-27 11:38
429 查看
超简单,几行代码搞定Android底部导航栏-----补充
应项目需求以及小伙伴的留言,新加了两个方法:
设置底部导航栏背景图片
添加底部导航栏选项卡切换监听事件
底部导航栏的实现也不难,就是下边是几个Tab切换,上边一般是一个FrameLayout,然后FrameLayout中切换fragment。
网上有不少关于Android底部导航栏的文章,不过好像都只是关于下边Tab切的,没有实现Tab与fragment的联动,用的时候还要自己手写这部分代码,对我这个比较懒(据说,懒是程序员的一种美德_#)得程序员来说,这是不能忍的。
下边就来说说我的BottomTabBar吧。
BottomTabBar.png
这就是我以前封装过的BottomTabBar的效果图,现在就从这张效果图开始,先分析一下,都需要设置那些参数吧。
1、BottomTabBar的整体背景
虽然一般这里都是用白色或者接近白色的浅色调作为背景,但我们也不能给他固定死,要提供这样的一个方法,让使用者可以把背景设置成任何的颜色。
2、图片
这里不仅要传入一个图片,还要做图片做一些设置:
图片的宽高尺寸(这个也需要对外设置一个方法)
图片得设置居中,这个直接固定写死就好了,我见过的应用都是设置居中的,没见过别的情况,个人感觉,不设置居中也不美观啊
3、 文字
与图片类似,文字也需要做一些设置:
文字的大小
文字也是需要设置居中的,也像图片一样固定写死
4、 颜色
文字和图片的颜色都是只有两种,一种是选中状态下的,一种是未选中的,我们可以在这里统一设置,提供一个方法就可以了
5、边距
这里需要设置三个地方的边距:
Top边距,也就是图片与上边分割线的距离
middle边距,也就是图片与文字的距离
Bottom边距,也就是文字与底部的距离
6、分割线
上边说到了,图片上边需要设置分割线,当然,这只是部分使用者需要设置的,所以我们需要提供一个方法,用来设置是否显示分割线。此外还要设置分割线的高度以及其背景颜色
7、fragment
我这个BottomTabBar既然是要与fragment联动的,所以必须要传入一个fragment
大体的参数就是需要这些了,下面上代码:
GitHub代码连接
用法也简单,就像标题说的几行代码就可以搞定:
1. 首先是XML文件代码:
当然,你要是想进行一些属性设置的话,需要加上命名空间
下面就开始详细的解释一下每个参数的含义以及用法:
这些参数可以指接在XML文件里设置
这里简单的提一句,这个init ( getSupportFragmentManager() )方法一定要第一个调用,没有这个初始化,后边什么也做不了。
或许大家也看出来了,这个init()方法里,我们需要传入一个FragmentManager,而且还是V4包下的,所以,在使用Activity的时候需要注意一下。
下边是一些方法的使用,都加了注释了
正确用法如下:
作者:古月金子皿
链接:https://www.jianshu.com/p/ade8485a16be
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
应项目需求以及小伙伴的留言,新加了两个方法:
设置底部导航栏背景图片
添加底部导航栏选项卡切换监听事件
底部导航栏的实现也不难,就是下边是几个Tab切换,上边一般是一个FrameLayout,然后FrameLayout中切换fragment。
网上有不少关于Android底部导航栏的文章,不过好像都只是关于下边Tab切的,没有实现Tab与fragment的联动,用的时候还要自己手写这部分代码,对我这个比较懒(据说,懒是程序员的一种美德_#)得程序员来说,这是不能忍的。
下边就来说说我的BottomTabBar吧。
BottomTabBar.png
这就是我以前封装过的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 | 未选中的颜色 |
<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 * @retu 4000 rn */ 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);
作者:古月金子皿
链接:https://www.jianshu.com/p/ade8485a16be
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- ios 学习笔记,tabbarcontroller 实现底部导航
- “fullLoad” app(二)之底部导航功能实现
- 底部导航:BottomTabBar的简单应用
- 底部导航:BottomTabBar的简单应用
- FragmentTabHost实现底部导航栏和顶部滑动导航
- 全屏实现-去除android盒子底部的虚拟导航按键
- 转-TabHost组件(一)(实现底部菜单导航)
- FragmentTabHost实现底部导航菜单
- 底部导航实现使子控件超出父控件的限制
- IOS_实现TabBar切换时底部切换效果
- TabLayout 简单实现底部图标文字导航,实现滑动底部变化效果
- TabHost实现底部导航示例
- Android TabLayout、ViewPager实现顶部和底部Tab导航 点击滑动切换Tab页面
- html 一款底部导航的实现
- 微信小程序tabBar底部导航中文注解api
- 底部四个导航图标实现《ImageView+TextView》
- 主流移动应用开发框架(2)——fragment+fragmenttabhost实现底部选项卡导航(可滑动切换)
- RadioGroup+FrameLayout实现底部导航页面
- Qt Quick实现底部导航
- 使用ViewPager+RadioGroup+Fragment实现类似微信的底部导航