TabLayout十分強(qiáng)大,特別是處理頂部導(dǎo)航的時(shí)候,幾行代碼就可以達(dá)到一個(gè)非常不錯(cuò)的效果,配置也相對簡單,具體使用,此處不多講,說說它與ViewPager聯(lián)動(dòng)的一些坑
1、TabLayout有直接關(guān)聯(lián) ViewPager的方法 setupWithViewPager(),使用這個(gè)方法,必須要在ViewPager設(shè)置適配器之后。 2、添加tab 使用這個(gè)方法 mTabLayout.addTab(mTabLayout.newTab()); 會(huì)出現(xiàn)tab不顯示的情況。主要是適配器沒重寫 getPageTitle();方法否則不顯示。 setupWithViewPager 會(huì)清除好多東西 追蹤下代碼,會(huì)移除許多ViewPager的監(jiān)聽,反正這個(gè)方法,也算是讓人愛恨交加的方法了。 3、如果是做底部導(dǎo)航,那么關(guān)于設(shè)置icon的問題,我用了 icon會(huì)縮小,而且文字與icon的距離不可控。所以做底部導(dǎo)航就需要用到自己的View了,用來的十分不好用,擴(kuò)展性不強(qiáng),好在TabLayout給出了拓展View的標(biāo)簽,下面貼下代碼當(dāng)然 對應(yīng)的ImageView的Drawable資源 就是一個(gè)selector 只不過里面的狀態(tài)要判斷的是status_selector 還有TextView的顏色選擇器也要自己定義 ,我隨便發(fā)一個(gè)我寫的吧,大家參考就行
ViewGroup tabParent;//根布局 ImageView tabImg;//圖片文件 TextView tabText;//文本 for (int i=0 ,length=names.length;i<length;i++) { TabLayout.Tab tab=mTabLayout.newTab(); tabParent= (ViewGroup) getLayoutInflater().inflate(R.layout.custom_tab_item,null,false); tab.setCustomView(tabParent); //作者自己的布局這么get沒毛病,還是推薦寫id 通過findViewById獲取控件 tabImg= (ImageView) tabParent.getChildAt(0); tabText= (TextView) tabParent.getChildAt(1); tabImg.setImageResource(icons[i]); tabText.setText(names[i]); mTabLayout.addTab(tab); }這樣寫擴(kuò)展性非常強(qiáng)。不過這種寫法需要手動(dòng)實(shí)現(xiàn)一些監(jiān)聽,TabLayout也給我們做好了
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));mTabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));各種選擇器實(shí)例:
圖片選擇器
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/student_mine_true" android:state_selected="true"/> <item android:drawable="@drawable/student_mine_false"/></selector>顏色選擇器:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/main_color"></item> <item android:state_selected="false" android:color="@color/main_grey"></item></selector>新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注