超簡(jiǎn)單的幾行代碼搞定Android底部導(dǎo)航欄功能
超簡(jiǎn)單,幾行代碼搞定Android底部導(dǎo)航欄—–應(yīng)項(xiàng)目需求以及小伙伴的留言,新加了兩個(gè)方法:
- 設(shè)置底部導(dǎo)航欄背景圖片
- 添加底部導(dǎo)航欄選項(xiàng)卡切換監(jiān)聽事件
底部導(dǎo)航欄的實(shí)現(xiàn)也不難,就是下邊是幾個(gè)Tab切換,上邊一般是一個(gè)FrameLayout,然后FrameLayout中切換fragment。
網(wǎng)上有不少關(guān)于Android底部導(dǎo)航欄的文章,不過好像都只是關(guān)于下邊Tab切的,沒有實(shí)現(xiàn)Tab與fragment的聯(lián)動(dòng),用的時(shí)候還要自己手寫這部分代碼,對(duì)我這個(gè)比較懶(據(jù)說(shuō),懶是程序員的一種美德_#)得程序員來(lái)說(shuō),這是不能忍的。
下邊就來(lái)說(shuō)說(shuō)我的BottomTabBar吧。

這就是我以前封裝過的BottomTabBar的效果圖,現(xiàn)在就從這張效果圖開始,先分析一下,都需要設(shè)置那些參數(shù)吧。
1、BottomTabBar的整體背景
雖然一般這里都是用白色或者接近白色的淺色調(diào)作為背景,但我們也不能給他固定死,要提供這樣的一個(gè)方法,讓使用者可以把背景設(shè)置成任何的顏色。
2、圖片
這里不僅要傳入一個(gè)圖片,還要做圖片做一些設(shè)置:
- 圖片的寬高尺寸(這個(gè)也需要對(duì)外設(shè)置一個(gè)方法)
- 圖片得設(shè)置居中,這個(gè)直接固定寫死就好了,我見過的應(yīng)用都是設(shè)置居中的,沒見過別的情況,個(gè)人感覺,不設(shè)置居中也不美觀啊
3、 文字
與圖片類似,文字也需要做一些設(shè)置:
- 文字的大小
- 文字也是需要設(shè)置居中的,也像圖片一樣固定寫死
4、 顏色
文字和圖片的顏色都是只有兩種,一種是選中狀態(tài)下的,一種是未選中的,我們可以在這里統(tǒng)一設(shè)置,提供一個(gè)方法就可以了
5、邊距
這里需要設(shè)置三個(gè)地方的邊距:
- Top邊距,也就是圖片與上邊分割線的距離
- middle邊距,也就是圖片與文字的距離
- Bottom邊距,也就是文字與底部的距離
6、分割線
上邊說(shuō)到了,圖片上邊需要設(shè)置分割線,當(dāng)然,這只是部分使用者需要設(shè)置的,所以我們需要提供一個(gè)方法,用來(lái)設(shè)置是否顯示分割線。此外還要設(shè)置分割線的高度以及其背景顏色
7、fragment
我這個(gè)BottomTabBar既然是要與fragment聯(lián)動(dòng)的,所以必須要傳入一個(gè)fragment
大體的參數(shù)就是需要這些了,下面上代碼:
用法也簡(jiǎn)單,就像標(biāo)題說(shuō)的幾行代碼就可以搞定:
引用方式:
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"/>
簡(jiǎn)單吧,就這么一個(gè)控件就可以了。
當(dāng)然,你要是想進(jìn)行一些屬性設(shè)置的話,需要加上命名空間
xmlns:hjm="
下面就開始詳細(xì)的解釋一下每個(gè)參數(shù)的含義以及用法:
| 參數(shù)名 | 涵義 |
|---|---|
| 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 | 未選中的顏色 |
這些參數(shù)可以指接在XML文件里設(shè)置
<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("第一項(xiàng)", R.mipmap.ic_launcher, OneFragment.class)
.addTabItem("第二項(xiàng)", R.mipmap.ic_launcher, TwoFragment.class)
.addTabItem("第三項(xiàng)", R.mipmap.ic_launcher, ThreeFragment.class)
.addTabItem("第四項(xiàng)", R.mipmap.ic_launcher, FourFragment.class);
也很簡(jiǎn)單,是吧。
這里簡(jiǎn)單的提一句,這個(gè)init ( getSupportFragmentManager() )方法一定要第一個(gè)調(diào)用,沒有這個(gè)初始化,后邊什么也做不了。
或許大家也看出來(lái)了,這個(gè)init()方法里,我們需要傳入一個(gè)FragmentManager,而且還是V4包下的,所以,在使用Activity的時(shí)候需要注意一下。
下邊是一些方法的使用,都加了注釋了
/** * 設(shè)置圖片的尺寸 * <p> * 此方法必須在addTabItem()之前調(diào)用 * * @param width 寬度 px * @param height 高度 px * @return */ setImgSize(float width, float height) /** * 設(shè)置文字的尺寸 * <p> * 此方法必須在addTabItem()之前調(diào)用 * * @param textSize 文字的尺寸 sp * @return */ setFontSize(float textSize) /** * 設(shè)置Tab的padding值 * <p> * 此方法必須在addTabItem()之前調(diào)用 * * @param top 上邊距 px * @param middle 文字圖片的距離 px * @param bottom 下邊距 px * @return */ setTabPadding(float top, float middle, float bottom) /** * 設(shè)置選中未選中的顏色 * <p> * 此方法必須在addTabItem()之前調(diào)用 * * @param selectColor 選中的顏色 * @param unSelectColor 未選中的顏色 * @return */ setChangeColor(@ColorInt int selectColor, @ColorInt int unSelectColor) /** * 設(shè)置BottomTabBar的整體背景 * * @param color 背景顏色 * @return */ setTabBarBackgroundColor(@ColorInt int color) /** * 是否顯示分割線 * * @param isShowDivider * @return */ isShowDivider(boolean isShowDivider) /** * 設(shè)置分割線的高度 * * @param height * @return */ setDividerHeight(float height) /** * 設(shè)置分割線的顏色 * * @param color * @return */ setDividerColor(@ColorInt int color) /** * 添加TabItem * * @param name 文字 * @param drawable 圖片 * @param fragmentClass fragment * @return */ addTabItem(String name, Drawable drawable, Class fragmentClass)
值得注意的是前四個(gè)方法必須在addTabItem()之前調(diào)用,如果放在addTabItem()之后調(diào)用的話,就沒有任何的效果了。
正確用法如下:
mBottomTabBar.init(getSupportFragmentManager())
.setImgSize(50,50)
.setFontSize(8)
.setTabPadding(4,6,10)
.setChangeColor(Color.DKGRAY,Color.RED)
.addTabItem("第一項(xiàng)", R.mipmap.ic_launcher, OneFragment.class)
.addTabItem("第二項(xiàng)", R.mipmap.ic_launcher, TwoFragment.class)
.addTabItem("第三項(xiàng)", R.mipmap.ic_launcher, ThreeFragment.class)
.addTabItem("第四項(xiàng)", R.mipmap.ic_launcher, FourFragment.class)
.setTabBarBackgroundColor(Color.WHITE)
.isShowDivider(false);
總結(jié)
以上所述是小編給大家介紹的超簡(jiǎn)單的幾行代碼搞定Android底部導(dǎo)航欄功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android 中使用RadioGroup和Fragment實(shí)現(xiàn)底部導(dǎo)航欄的功能
- 性能分析:指如何快速定位SQL問題
- android中Fragment+RadioButton實(shí)現(xiàn)底部導(dǎo)航欄
- Android自定義ViewPagerIndicator實(shí)現(xiàn)炫酷導(dǎo)航欄指示器(ViewPager+Fragment)
- Android程序開發(fā)之Fragment實(shí)現(xiàn)底部導(dǎo)航欄實(shí)例代碼
- Android實(shí)現(xiàn)沉浸式通知欄通知欄背景顏色跟隨app導(dǎo)航欄背景顏色而改變
- Android實(shí)現(xiàn)底部導(dǎo)航欄功能(選項(xiàng)卡)
- Android 彈出Dialog時(shí)隱藏狀態(tài)欄和底部導(dǎo)航欄的方法
- Android 沉浸式狀態(tài)欄與隱藏導(dǎo)航欄實(shí)例詳解
- android 全屏去掉底部虛擬導(dǎo)航欄的方法
- 解決android 顯示內(nèi)容被底部導(dǎo)航欄遮擋的問題
- Android仿今日頭條頂部導(dǎo)航欄效果的實(shí)例代碼
- Android仿網(wǎng)易客戶端頂部導(dǎo)航欄效果
- Android?Fragment實(shí)現(xiàn)頂部、底部導(dǎo)航欄
相關(guān)文章
Android 自定義view實(shí)現(xiàn)進(jìn)度條加載效果實(shí)例代碼
這篇文章主要介紹了Android 自定義view實(shí)現(xiàn)進(jìn)度條加載效果實(shí)例代碼,需要的朋友可以參考下2017-08-08
Android webveiw 出現(xiàn)棧錯(cuò)誤解決辦法
這篇文章主要介紹了Android webveiw 出現(xiàn)棧錯(cuò)誤解決辦法的相關(guān)資料,出現(xiàn)java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes,這里提供解決辦法,需要的朋友可以參考下2017-08-08
Android開發(fā)實(shí)現(xiàn)應(yīng)用層面屏蔽狀態(tài)欄的方法小結(jié)
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)應(yīng)用層面屏蔽狀態(tài)欄的方法,結(jié)合實(shí)例形式分析了Android屏蔽狀態(tài)欄的相關(guān)函數(shù)調(diào)用、權(quán)限控制及函數(shù)重寫等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Android開發(fā)之圖片壓縮實(shí)現(xiàn)方法分析
這篇文章主要介紹了Android開發(fā)之圖片壓縮實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android圖片壓縮的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03
ScrollView滾動(dòng)條顏色的設(shè)置方法
ScrollView滾動(dòng)條顏色的設(shè)置方法,需要的朋友可以參考一下2013-06-06
Android 8.0 慢充和快充提示語(yǔ)的實(shí)現(xiàn)原理
這篇文章主要介紹了Android 8.0 慢充和快充提示語(yǔ)的實(shí)現(xiàn)原理,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05
Android之PreferenceActivity應(yīng)用詳解(2)
看到很多書中都沒有對(duì)PreferenceActivity做介紹,而我正好又在項(xiàng)目中用到,所以就把自己的使用的在這總結(jié)一下,也方便日后查找2012-11-11
Android ViewPagerIndicator詳解及實(shí)例代碼
這篇文章主要介紹了Android ViewPagerIndicator詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05

