TabLayout的用法進(jìn)行總結(jié)和歸納

Google官方在14年Google I/O上推出了全新的設(shè)計(jì)語言——Material Design碉咆。一并推出了一系列實(shí)現(xiàn)Material Design效果的控件庫——AndroidDesign Support Library。其中,有TabLayout, NavigationView,Floating labels for editing text,Floating Action Button,Snackbar, CoordinatorLayout, CollapsingToolbarLayout等等控件。在今后的學(xué)習(xí)中改化,我將一一介紹它們的特點(diǎn)和用法辨嗽。
我們可以使用三方開源的PagerSlidingTabStrip去實(shí)現(xiàn)猜扮,或者viewpagerindicator郎笆,我一般都偏向前者√饭#現(xiàn)在我們可以使用Design support library庫的TabLayout去實(shí)現(xiàn)了。

Demo地址https://github.com/setasmallgoal/TabLayoutDemo

Demo首頁圖:

首頁圖

最終的效果圖:

效果圖

一宛蚓、TabLayout基本使用 激捏。

1.在應(yīng)用的Build.gradle中添加support.design支持庫(注意:必須和v7包的版本相同)。

compile 'com.android.support:design:25.3.1'

2.TabLayout第一種使用–Tab固定模式凄吏。

Tab固定模式

1)創(chuàng)建布局文件activity_short_tab,在布局文件中添加TabLayout及ViewPager远舅。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.linwei.lw.tablayoutdemo.ui.activity.MainActivity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabIndicatorHeight="2dp"
        app:tabMode="fixed"
        app:tabSelectedTextColor="@color/colorAccent">
    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </android.support.v4.view.ViewPager>

</LinearLayout>

2)定義一個(gè)FragmentFactivity的Fragment工廠類,專門生產(chǎn)Fragment對(duì)象(用了工廠類痕钢,方便Fragment使用图柏,提高了性能,在項(xiàng)目中很常見任连,記得在android5.0的Demo中也是怎么寫的蚤吹,可能有些讀者覺得沒必要,也可以每次去創(chuàng)建Fragment随抠,并添加到ViewPager中也可)裁着。

package com.linwei.lw.tablayoutdemo.ui.fragment;

import java.util.HashMap;

/**
 * Fragment工廠類。
 * Created by LW on 2017/4/20.
 */

public class FragmentFactory {
    private static HashMap<Integer, BaseFragment> mBaseFragments = new HashMap<Integer, BaseFragment>();

    public static BaseFragment createFragment(int pos) {
        BaseFragment baseFragment = mBaseFragments.get(pos);

        if (baseFragment == null) {
            switch (pos) {
                case 0:
                    baseFragment = new TopLineFragment();//頭條
                    break;
                case 1:
                    baseFragment = new NewsFragment();//要聞
                    break;
                case 2:
                    baseFragment = new EntertainmentFragment();//娛樂
                    break;
                case 3:
                    baseFragment = new SportsFragment();//體育
                    break;
                case 4:
                    baseFragment = new FinanceFragment();//財(cái)經(jīng)
                    break;
                case 5:
                    baseFragment = new ScienceFragment();//科技
                    break;
                case 6:
                    baseFragment = new ModeFragment();//時(shí)尚
                    break;
                case 7:
                    baseFragment = new VideoFragment();//視頻
                    break;
                case 8:
                    baseFragment = new  DirectSeedingFragment();//直播
                    break;

            }
            mBaseFragments.put(pos, baseFragment);
        }
        return baseFragment;
    }
}

3)定義一個(gè)Fragment的父類BaseFragment拱她,我就不解釋了看代碼二驰。

package com.linwei.lw.tablayoutdemo.ui.fragment;


import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by LW on 2017/4/20.
 */

public abstract class BaseFragment extends Fragment {

    protected Context mContent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContent = getContext();//上下文。
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return initView();//初始化布局秉沼。
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        loadData();//初始化數(shù)據(jù)桶雀。
    }

    protected abstract void loadData();

    protected abstract View initView();
}

4)BaseFragment的實(shí)現(xiàn)子類TopLineFragment,這里我就只列出一個(gè)子類代碼唬复,其他子類代碼也是一樣的矗积。

package com.linwei.lw.tablayoutdemo.ui.fragment;

import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by LW on 2017/4/21.
 */
public class TopLineFragment extends BaseFragment {
    @Override
    protected void loadData() {
        Toast.makeText(mContent,"Fragment頭條加載數(shù)據(jù)",Toast.LENGTH_SHORT).show();
    }

    @Override
    protected View initView() {
        TextView mView = new TextView(mContent);
        mView.setText("Fragment頭條");
        mView.setGravity(Gravity.CENTER);
        mView.setTextSize(18);
        mView.setTextColor(Color.BLACK);
        return mView;
    }
}

5)arrays.xml中第一顯示數(shù)據(jù)。我了方便使用盅抚,通過字符串?dāng)?shù)組定義起來漠魏。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="tab_short_Title">
        <item>頭條</item>
        <item>要聞</item>
        <item>娛樂</item>
        <item>體育</item>
    </string-array>

    <string-array name="tab_long_Title">
        <item>頭條</item>
        <item>要聞</item>
        <item>娛樂</item>
        <item>體育</item>
        <item>財(cái)經(jīng)</item>
        <item>科技</item>
        <item>時(shí)尚</item>
        <item>視頻</item>
        <item>直播</item>
    </string-array>
</resources>

6)ShortTabActivity類,實(shí)現(xiàn)TabLayout和ViewPager的業(yè)務(wù)邏輯妄均。

package com.linwei.lw.tablayoutdemo.ui.activity;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;

import com.linwei.lw.tablayoutdemo.R;
import com.linwei.lw.tablayoutdemo.Utils.CommentUtils;
import com.linwei.lw.tablayoutdemo.ui.fragment.BaseFragment;
import com.linwei.lw.tablayoutdemo.ui.fragment.FragmentFactory;

public class ShortTabActivity extends AppCompatActivity {
    private TabLayout mTab;
    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_short_tab);
        initView();
        initData();
    }

    private void initData() {
        ShortPagerAdapter adapter = new ShortPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(adapter);
        mTab.setupWithViewPager(mViewPager);

    }

    private void initView() {
        mTab = (TabLayout) findViewById(R.id.tab);
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
    }

    private class ShortPagerAdapter extends FragmentPagerAdapter {
        public String[] mTilte;

        public ShortPagerAdapter(FragmentManager fm) {
            super(fm);
            mTilte = getResources().getStringArray(R.array.tab_short_Title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mTilte[position];
        }

        @Override
        public BaseFragment getItem(int position) {
            BaseFragment fragment = FragmentFactory.createFragment(position);
            return fragment;
        }

        @Override
        public int getCount() {
            return CommentUtils.TAB_SHORT_COUNT;
        }
    }
}

TabLayout其他模式柱锹,我就不一一介紹,這里有Demo和CSDN詳細(xì)文章丰包。
原文出處:http://blog.csdn.net/persistence_lw/article/details/70473255
最后禁熏,附上源碼地址:https://github.com/setasmallgoal/TabLayoutDemo
(原文來自本人,謝謝閱讀)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邑彪,一起剝皮案震驚了整個(gè)濱河市瞧毙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖宙彪,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矩动,死亡現(xiàn)場離奇詭異,居然都是意外死亡释漆,警方通過查閱死者的電腦和手機(jī)悲没,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來男图,“玉大人示姿,你說我怎么就攤上這事⊙钒剩” “怎么了栈戳?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長难裆。 經(jīng)常有香客問我子檀,道長,這世上最難降的妖魔是什么乃戈? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任命锄,我火速辦了婚禮,結(jié)果婚禮上偏化,老公的妹妹穿的比我還像新娘。我一直安慰自己镐侯,他們只是感情好侦讨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苟翻,像睡著了一般韵卤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崇猫,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天沈条,我揣著相機(jī)與錄音,去河邊找鬼诅炉。 笑死蜡歹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涕烧。 我是一名探鬼主播月而,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼议纯!你這毒婦竟也來了父款?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎憨攒,沒想到半個(gè)月后世杀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肝集,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瞻坝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片包晰。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湿镀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伐憾,到底是詐尸還是另有隱情勉痴,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布树肃,位于F島的核電站蒸矛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胸嘴。R本人自食惡果不足惜雏掠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劣像。 院中可真熱鬧乡话,春花似錦、人聲如沸耳奕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屋群。三九已至闸婴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芍躏,已是汗流浹背邪乍。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留对竣,地道東北人庇楞。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像柏肪,于是被迫代替她去往敵國和親姐刁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評(píng)論 25 707
  • afinalAfinal是一個(gè)android的ioc烦味,orm框架 https://github.com/yangf...
    passiontim閱讀 15,406評(píng)論 2 45
  • 文/圓子 01 莎士比亞在《安東尼與克莉奧佩特拉》說聂使,女人在最幸福的環(huán)境里壁拉,也往往抵抗不了外界誘惑。一旦到了貧窮無...
    圓子_gxg閱讀 671評(píng)論 0 3
  • 坐享6分鐘柏靶,時(shí)刻保持寧靜的心弃理,時(shí)刻保持冷靜,保持清醒的頭腦屎蜓。
    多維度成長閱讀 130評(píng)論 0 1
  • 作為一名初中生炬转,時(shí)間對(duì)于我來說是多么的寶貴辆苔,現(xiàn)在回想起來,自己活的這十三多年來扼劈,沒有做過一件有意義的事驻啤,虛度了十三...
    2113zxy閱讀 293評(píng)論 2 1