1、BottomTabBar的整体背景
虽然一般这里都是用白色或者接近白色的浅色调作为背景,但我们也不能给他固定死,要提供这样的一个方法,让使用者可以把背景设置成任何的颜色。
2、图片
这里不仅要传入一个图片,还要做图片做一些设置:
- 图片的宽高尺寸(这个也需要对外设置一个方法)
- 图片得设置居中,这个直接固定写死就好了,我见过的应用都是设置居中的,没见过别的情况,个人感觉,不设置居中也不美观啊
3、 文字
与图片类似,文字也需要做一些设置:
- 文字的大小
- 文字也是需要设置居中的,也像图片一样固定写死
4、 颜色
文字和图片的颜色都是只有两种,一种是选中状态下的,一种是未选中的,我们可以在这里统一设置,提供一个方法就可以了
5、边距
这里需要设置三个地方的边距:
- Top边距,也就是图片与上边分割线的距离
- middle边距,也就是图片与文字的距离
- Bottom边距,也就是文字与底部的距离
6、分割线
上边说到了,图片上边需要设置分割线,当然,这只是部分使用者需要设置的,所以我们需要提供一个方法,用来设置是否显示分割线。此外还要设置分割线的高度以及其背景颜色
7、fragment
我这个BottomTabBar既然是要与fragment联动的,所以必须要传入一个fragment
大体的参数就是需要这些了,下面上代码:
用法也简单,就像标题说的几行代码就可以搞定:
引用方式:
compile 'com.hjm:BottomTabBar:1.1.2'
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);
总结:
最快制作页面底部的四个RadioButto
(1)先将compile 'com.hjm:BottomTabBar:1.1.1' 导入build.gradle。
在布局文件里面导入<com.hjm.bottomtabbar.BottomTabBar>把宽高全部都为充满。在创建一个布局fragment方便后面进行使用,里面什么都不用写。
(2)在主类里面创建一个方法init(),
将下面代码直接粘贴,复制
- <code class="language-html"> bottomTabBar = (BottomTabBar) findViewById(R.id.bottomTabBar);
- //底部导航栏
- bottomTabBar.init(getSupportFragmentManager())
- .setImgSize(35, 35)
- .setFontSize(10)
- .setChangeColor(Color.RED, Color.GRAY)
- .addTabItem("首页", R.mipmap.ic_nav_home_press, R.mipmap.ic_nav_home, Fragment1.class) 前面第一个是点击后的图片,第二个是点击前的图片
- .addTabItem("分类", R.mipmap.ic_nav_class_press, R.mipmap.ic_nav_class, Fragment2.class)
- .addTabItem("购物车", R.mipmap.ic_nav_cart_press, R.mipmap.ic_nav_cart, Fragment3.class)
- .addTabItem("个人", R.mipmap.ic_nav_user_press, R.mipmap.ic_nav_user, Fragment4.class)
- .isShowDivider(false);</code>
最后创建4个fragment,在frangment重写onCreateView的方法,(特别注意导包一定要导android.support.v4.app.Fragment)
-
View view=inflater.inflate(R.layout.fragment,container, false);
-
return view;
-