TabContainerView一一實(shí)現(xiàn)底部導(dǎo)航欄效果

作者簡介? 原創(chuàng)微信公眾號郭霖 WeChat ID: guolin_blog

效果圖


上圖效果大家應(yīng)該都很熟悉了秒咐,基本市面上的App都會用到這種布局效果氨鹏,實(shí)現(xiàn)起來也很簡單,就是上面一個(gè) ViewPager卿嘲,下面一個(gè)線性布局

TabContainerView 就是把實(shí)現(xiàn)邏輯封裝起來大刊,讓開發(fā)者可以通過更簡單的代碼實(shí)現(xiàn)這種布局效果,提高工作效率敌蜂。

使用


就是這么簡單箩兽,調(diào)用兩行代碼就可以實(shí)現(xiàn)了,不過需要我們自己創(chuàng)建一個(gè)適配器章喉,MainTabContainerAdapter 就是自己創(chuàng)建的汗贫,它需要繼承 BaseAdapter 來實(shí)現(xiàn)里面的抽象方法,BaseAdapter 是此項(xiàng)目當(dāng)中自定義的抽象類秸脱。

思路

TabContainerView 是一個(gè) RelativeLayout 布局落包,整個(gè)布局由兩部分組成:底部布局摊唇,內(nèi)容布局

底部布局為一個(gè) LinearLayout 布局咐蝇,里面的單個(gè) Tab 也是一個(gè) LinarLayout 布局;中間的內(nèi)部區(qū)域是一個(gè) ViewPager巷查。

實(shí)現(xiàn)

項(xiàng)目由6個(gè)類組成:


我們先來分析調(diào)用的第一行代碼

TabContainerViewtabContainerView=(TabContainerView) findViewById(R.id.container_tab);

看看它的構(gòu)造方法:


構(gòu)造方法調(diào)用了init方法:


分別初始化了自定義屬性有序,底部的 TabHost,分割線岛请,ViewPager 等旭寿;initStyle 就是初始化一些自定義的屬性,沒啥好說的崇败;我們來看下 initTabHost 方法:


initTabHost方法里創(chuàng)建了一個(gè) TabHost盅称,TabHost 的構(gòu)造方法里調(diào)用initView方法,方法創(chuàng)建 RootView 布局后室,設(shè)置長寬, 位置等屬性缩膝,然后把 TabHost 的根布局添加到 TabContainerView 布局當(dāng)中。

initDivideLine 方法創(chuàng)建一個(gè)分割線View添加到布局當(dāng)中

initViewPager 方法創(chuàng)建一個(gè)ViewPager添加到布局當(dāng)中

下面再來看看第二行代碼


里面做了些什么事情:


BaseAdapter 是個(gè)抽象類:


它提供了容器當(dāng)中需要的文本咧擂,圖片逞盆,還有內(nèi)容區(qū)的 fragment 信息

方法里調(diào)用 TabHost 的 addTabs 方法給 TabHost 添加 Tab


通過方法得到文本,圖片等數(shù)組松申,然后通過循環(huán)創(chuàng)建 Tab 對象云芦,添加到 TabHost 布局當(dāng)中俯逾,我們來看看 Tab?的構(gòu)造方法:


Tab 的構(gòu)造方法就是給文本和圖片的屬性設(shè)值,添加監(jiān)聽舅逸,創(chuàng)建Tab需要的文本桌肴,圖片布局。接下來給 ViewPager 設(shè)置適配器琉历,添加 fragment

contentViewPager.setAdapter(newTabViewPagerAdapter(baseAdapter.getFragmentManager(), baseAdapter.getFragmentArray()));

這樣底部的 Tab 和內(nèi)容區(qū)域的 ViewPager 數(shù)據(jù)都填充完成了

接下來需要設(shè)置點(diǎn)擊狀態(tài)的切換坠七,從 Tab類 的 init方法 里可以看出給 RootView 添加了點(diǎn)擊事件,onClick 方法會調(diào)用 TabHost 設(shè)置給 Tab 的監(jiān)聽回調(diào)類旗笔,下面的代碼就是 TabHost 給 Tab 添加的監(jiān)聽:


onTabSelected 方法里設(shè)置 contentViewPager 當(dāng)前選中的 Item彪置,然后會回調(diào)到 ViewPager 監(jiān)聽類 OnPageChangeListener的onPageSelected 方法:


首先調(diào)用 onChangeTabHostStatus 方法:


循環(huán) TabList,根據(jù) index 判斷 Tab 狀態(tài)的選中與否然后調(diào)用回調(diào)監(jiān)聽 onTabSelectedListener 的 onTabSelected方法

到此為止整個(gè)項(xiàng)目的實(shí)現(xiàn)過程就分析完了蝇恶。

文章原創(chuàng)作者GuoLin 書籍推薦

郭林大神原創(chuàng)android 書籍:《第一行代碼 android》

淘寶鏈接:

https://s.click.taobao.com/t?e=m%3D2%26s%3DgKUfuKdAZKocQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67p2n%2BQBNMyE6Rku8%2Bpj6eJall3bs%2B3NRhNHnsKI%2BqxhyM0iVZhTFBom4YIorMPnmg8G0g2OJi%2FzmXHfenomYtn5EW9vzeG8LzfPUwktUBEmkxg5p7bh%2BFbQ%3D&pvid=10_106.6.161.154_3367_1490163222155

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拳魁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撮弧,更是在濱河造成了極大的恐慌潘懊,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贿衍,死亡現(xiàn)場離奇詭異授舟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贸辈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門释树,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裙椭,你說我怎么就攤上這事躏哩。” “怎么了揉燃?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵扫尺,是天一觀的道長。 經(jīng)常有香客問我炊汤,道長正驻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任抢腐,我火速辦了婚禮姑曙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迈倍。我一直安慰自己伤靠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布啼染。 她就那樣靜靜地躺著宴合,像睡著了一般焕梅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卦洽,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天贞言,我揣著相機(jī)與錄音,去河邊找鬼阀蒂。 笑死该窗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚤霞。 我是一名探鬼主播酗失,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼争便!你這毒婦竟也來了级零?” 一聲冷哼從身側(cè)響起断医,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤滞乙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鉴嗤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斩启,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年醉锅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兔簇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硬耍,死狀恐怖垄琐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情经柴,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站蒋困,受9級特大地震影響政恍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牛哺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一陋气、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧引润,春花似錦巩趁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凰荚。三九已至,卻和暖如春褒脯,著一層夾襖步出監(jiān)牢的瞬間便瑟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工番川, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留到涂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓颁督,卻偏偏與公主長得像践啄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子沉御,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容