TabLayout自定義Tab實現(xiàn)不同的圓角效果

開發(fā)過程中經(jīng)常會遇到Tab左右或中間的圓角不一樣献酗,如下圖所示:



根據(jù)上圖發(fā)現(xiàn)兩個Tab圓角不同,且不對稱,無法通過設(shè)置tabBackground屬性來實現(xiàn)不同的圓角浪慌,解決方案是采用自定義TabView的方法笼恰。具體實現(xiàn)方案如下:
TabLayout屬性設(shè)置:

<android.support.design.widget.TabLayout
        android:id="@+id/tb_layout"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:padding="0dp"
        app:tabIndicatorHeight="0dp"
        app:tabPaddingBottom="0dp"
        app:tabPaddingEnd="0dp"
        app:tabPaddingStart="0dp"
        app:tabPaddingTop="0dp"
        app:tabSelectedTextColor="@color/white"
        app:tabTextAppearance="@style/text_14_33_df"/>

tabPadding和padding全部設(shè)置為0踊沸,由自定義TabView來設(shè)置相應(yīng)的padding,tabIndicatorHeight設(shè)置為0社证,tabSelectedTextColor設(shè)置選中Tab文字顏色雕沿,tabTextAppearance設(shè)置Tab未選中文字顏色。
左邊Tab選中背景bg_tab_left_select.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/tv_color_blue"/>
    <corners
        android:topLeftRadius="5dp"/>
</shape>

左邊Tab未選中背景bg_tab_left_unselect.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/white"/>
    <corners
        android:topLeftRadius="5dp"/>
</shape>

右邊Tab選中背景bg_tab_right_select.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/tv_color_blue"/>

    <corners
        android:topRightRadius="5dp"/>
</shape>

右邊Tab未選中背景bg_tab_right_unselect.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/white"/>
    <corners
        android:topRightRadius="5dp"/>
</shape>

左邊Tab背景選擇器tab_left_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_tab_left_unselect" android:state_selected="false"/>
    <item android:drawable="@drawable/bg_tab_left_select" android:state_selected="true"/>
</selector>

右邊Tab背景選擇器tab_right_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_tab_right_unselect" android:state_selected="false"/>
    <item android:drawable="@drawable/bg_tab_right_select" android:state_selected="true"/>
</selector>

左邊TabView自定義布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="45dp"
              android:background="@drawable/tab_left_selector"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
        android:id="@+id/tab_text_left"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:gravity="center"
        android:textSize="@dimen/text_size_14"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:textColor="@color/tv_color_33"/>
</LinearLayout>

右邊TabView自定義布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="45dp"
              android:background="@drawable/tab_right_selector"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
        android:id="@+id/tab_text_right"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:gravity="center"
        android:textSize="@dimen/text_size_14"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:textColor="@color/tv_color_33"/>

</LinearLayout>

注意:
自定義View的高度要保持與TabLayout高度一致猴仑,負責背景填充有問題审轮。
最后代碼實現(xiàn):

viewPager.setOffscreenPageLimit(fragments.size());
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setupWithViewPager(viewPager);

if (tabLayout != null) {
            TabLayout.Tab tab1 = tabLayout.getTabAt(0);
            if (tab1 != null) {
                tab1.setCustomView(getTabView0(getActivity()));
            }
            TabLayout.Tab tab2 = tabLayout.getTabAt(1);
            if (tab2 != null) {
                tab2.setCustomView(getTabView1(getActivity()));
            }
        }


public View getTabView0(Context context) {
        LayoutInflater mInflater = LayoutInflater.from(context);
        View view = mInflater.inflate(R.layout.item_tab_left, null);
        TextView tv = (TextView) view.findViewById(R.id.tab_text_left);
        tv.setText(titles[0]);
        return view;
    }

    public View getTabView1(Context context) {
        LayoutInflater mInflater = LayoutInflater.from(context);
        View view = mInflater.inflate(R.layout.item_tab_right, null);
        TextView tv = (TextView) view.findViewById(R.id.tab_text_right);
        tv.setText(titles[1]);
        return view;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辽俗,隨后出現(xiàn)的幾起案子疾渣,更是在濱河造成了極大的恐慌,老刑警劉巖崖飘,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榴捡,死亡現(xiàn)場離奇詭異,居然都是意外死亡朱浴,警方通過查閱死者的電腦和手機篓吁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛腕,“玉大人服赎,你說我怎么就攤上這事×翰祝” “怎么了檀何?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我频鉴,道長栓辜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任垛孔,我火速辦了婚禮藕甩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘周荐。我一直安慰自己辛萍,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布羡藐。 她就那樣靜靜地躺著贩毕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仆嗦。 梳的紋絲不亂的頭發(fā)上辉阶,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音瘩扼,去河邊找鬼谆甜。 笑死,一個胖子當著我的面吹牛集绰,可吹牛的內(nèi)容都是我干的规辱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼栽燕,長吁一口氣:“原來是場噩夢啊……” “哼罕袋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碍岔,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浴讯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蔼啦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榆纽,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年捏肢,在試婚紗的時候發(fā)現(xiàn)自己被綠了奈籽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸵赫,死狀恐怖衣屏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奉瘤,我是刑警寧澤勾拉,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布煮甥,位于F島的核電站盗温,受9級特大地震影響藕赞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卖局,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一斧蜕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砚偶,春花似錦批销、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至单鹿,卻和暖如春掀宋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仲锄。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工劲妙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儒喊。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓镣奋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怀愧。 傳聞我的和親對象是個殘疾皇子侨颈,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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

  • 當人們合家團聚肛搬、共慶新春的時候,有誰知道有那么一群平凡的人過著不平凡的日子毕贼,他們心里充滿著溫暖温赔,也充滿了對家人的牽...
    田真十閱讀 468評論 4 4
  • 閑暇之余,邊角廢紙鬼癣,信筆涂鴉陶贼!稱不上名家手筆,我心亦喜待秃。大千世界拜秧,蕓蕓眾生,能心安者幾何章郁?或為名枉氮、或為利志衍、或為財、...
    與茶有緣閱讀 402評論 1 3
  • 近日工作不忙聊替,閑暇在家楼肪,卻是被母親的嘮叨煩了心,無非是奉勸我抓緊找個對象惹悄,不要錯過了該談戀愛結(jié)婚的好時光春叫,又舉...
    病嬌0閱讀 459評論 0 1
  • 厲國剛:貴圈的“水”好大暂殖,尚雯婕拒絕“注水”了 近日,尚雯婕發(fā)文宣稱不再讓團隊買水軍当纱,認為“能讓關(guān)注我的人看到真實...
    微觀大道閱讀 198評論 0 1