Tablayout使用的注意事項(xiàng)

總結(jié)一下tabLayout使用中的一些注意事項(xiàng)

TabLayout作為常用的控件问裕, 在官方更新維護(hù)后也可以方便的增加角標(biāo)了。這么好用的控件使用起來(lái)卻有很多需要注意點(diǎn) ∷傅牵總結(jié)一下方便大家使用。

  • 自定義下劃線

劃重點(diǎn) 首先需要更新你的material庫(kù) 1.4.0之后就可以自定義下劃線啦

首先直接寫一個(gè)drawble文件 注意要用layer-list包裹

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:gravity="center_horizontal"
        >
        <shape>
            <solid android:color="#EE9D18"/>
            <size
                android:width="10dp"
                android:height="2dp" />
        </shape>
    </item>
</layer-list>

shape里的屬性都支持哦 還可以漸變 圓角都沒(méi)有問(wèn)題

然后有一個(gè)關(guān)鍵點(diǎn)來(lái)了 app:tabIndicatorColor必須設(shè)置為@null 官方給的demo里沒(méi)設(shè)這個(gè)沒(méi)有效果

app:tabIndicator="@drawable/shape_indicator"
app:tabIndicatorColor="@null"

這樣自定義寬高的下劃線就搞定了N狄ā6住!

  • 更改text字體大小

TabLayout中有一個(gè)屬性是可以更改字體大小的 但是使用起來(lái)并沒(méi)有那么方便
首先需要自定義一個(gè)style

<style name="SmallText" parent="android:TextAppearance">
        <item name="android:textSize">12sp</item>
    </style>

然后在TabLayout中引用就可以啦

app:tabTextAppearance="@style/SmallText"
  • 自定義Tab

舉個(gè)例子

tab.png

一個(gè)textview 赌躺,一個(gè)圖片狼牺, 選中的時(shí)候顯示。
首先寫tab布局 注意textview使用@android:id/text1可以直接setText會(huì)方便一些

注 自定義的tab會(huì)使tabSelectedTextColor 和 tabTextColor會(huì)失效 需要自己手動(dòng)設(shè)置

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.textview.MaterialTextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:textColor="@color/tv_rb_dark"
        android:textStyle="bold"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/tab_icon"
        android:layout_width="15dp"
        android:layout_marginLeft="4dp"
        android:layout_height="12.5dp"
        android:src="@mipmap/ic_message"
        android:visibility="invisible"
        app:layout_constraintLeft_toRightOf="@android:id/text1"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

然后添加tab

需要在onResume中添加 這樣會(huì)默認(rèn)觸發(fā)onTabSelected以及onTabUnselected

如果在onCreate方法中則不會(huì)觸發(fā) 需要做額外的處理比較麻煩

tabLayout.addTab(tabLayout.newTab().setCustomView(R.layout.tab).setText("我是tab"));

添加監(jiān)聽

 tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                TextView textView=tab.getCustomView().findViewById(android.R.id.text1);
                textView.setTextColor(mActivity.getResources().getColor(R.color.tab_select));
                ImageView img=tab.getCustomView().findViewById(R.id.tab_icon);
                img.setVisibility(View.VISIBLE);
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                TextView textView=tab.getCustomView().findViewById(android.R.id.text1);
                textView.setTextColor(mActivity.getResources().getColor(R.color.tv_rb_dark));
                ImageView img=tab.getCustomView().findViewById(R.id.tab_icon);
                img.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

搞定

  • 和viewpager2聯(lián)動(dòng)以及增加角標(biāo)

和viewpager2聯(lián)動(dòng)也很簡(jiǎn)單 使用TabLayoutMediator即可 viewpager2設(shè)置adpter后才可以調(diào)用

使用TabLayoutMediator不需要再手動(dòng)添加tab了

new TabLayoutMediator(tabLayout, viewPager2, true,new TabLayoutMediator.TabConfigurationStrategy() {

            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                tab.setText("tab");
            }
        }).attach();

添加角標(biāo)也很簡(jiǎn)單 調(diào)用Tab的getOrCreateBadge()方法 即可獲取到BadgeDrawable

舉個(gè)列子
            BadgeDrawable badgeDrawable= tabLayout.getTabAt(i).getOrCreateBadge();
            int num=list.get(i);
            badgeDrawable.setNumber(num);
            if(num<=0){
                badgeDrawable.setVisible(false);
            }else{
                badgeDrawable.setVisible(true);
            }

也可以放在TabLayoutMediator中設(shè)置礼患。

  • 其他的一些常用方法和注意事項(xiàng)

1.獲取當(dāng)前選中的tab位置tabLayout.getSelectedTabPosition();
2.對(duì)于動(dòng)態(tài)的tab 可以選擇在tab添加完成后再增加tab切換監(jiān)聽 然后調(diào)用
tabLayout.getTabAt(position).select();即可選中某個(gè)tab是钥。并且不需要額外處理邏輯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缅叠,隨后出現(xiàn)的幾起案子悄泥,更是在濱河造成了極大的恐慌,老刑警劉巖肤粱,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弹囚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡领曼,警方通過(guò)查閱死者的電腦和手機(jī)鸥鹉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蛮穿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人毁渗,你說(shuō)我怎么就攤上這事绪撵。” “怎么了祝蝠?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵音诈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绎狭,道長(zhǎng)细溅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任儡嘶,我火速辦了婚禮喇聊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹦狂。我一直安慰自己誓篱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布凯楔。 她就那樣靜靜地躺著窜骄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摆屯。 梳的紋絲不亂的頭發(fā)上邻遏,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音虐骑,去河邊找鬼准验。 笑死,一個(gè)胖子當(dāng)著我的面吹牛廷没,可吹牛的內(nèi)容都是我干的糊饱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼颠黎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼另锋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起盏缤,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤砰蠢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后唉铜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體台舱,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竞惋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柜去。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拆宛,靈堂內(nèi)的尸體忽然破棺而出嗓奢,到底是詐尸還是另有隱情,我是刑警寧澤浑厚,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布股耽,位于F島的核電站,受9級(jí)特大地震影響钳幅,放射性物質(zhì)發(fā)生泄漏物蝙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一敢艰、第九天 我趴在偏房一處隱蔽的房頂上張望诬乞。 院中可真熱鬧,春花似錦钠导、人聲如沸震嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)票堵。三九已至,卻和暖如春湃望,著一層夾襖步出監(jiān)牢的瞬間换衬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工证芭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人担映。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓废士,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蝇完。 傳聞我的和親對(duì)象是個(gè)殘疾皇子官硝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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