Android使用TabLayout+Viewpager+ Fragment實(shí)現(xiàn)了底部導(dǎo)航欄的效果

首先TabLayout一般都是配合Viewpager使用的,Viewpager里的Fragment隨著頂部的Tab一起聯(lián)動(dòng),這種場(chǎng)景再熟悉不過(guò)了。效果如圖所示:

效果圖00.png

一奈搜、 配置build.gradle (添加如下代碼)


build.gradle.png

二、values屬性文件

  1. arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="tab_titles">
        <item>首頁(yè)</item>
        <item>發(fā)現(xiàn)</item>
        <item>分類</item>
        <item>購(gòu)物車(chē)</item>
        <item>我的</item>
    </string-array>
</resources>
  1. colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="tab_background">#f9f9f9</color>
</resources>
  1. strings.xml
<resources>
    <string name="app_name">My Application</string>

    <!-- TODO: Remove or change this placeholder text -->
    <string name="hello_blank_fragment">Hello blank fragment</string>
</resources>
  1. styles.xml
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
        <item name="tabIndicatorColor">?attr/colorAccent</item>
        <item name="tabIndicatorHeight">0dp</item>
        <!--<item name="tabPaddingStart">12dp</item>-->
        <item name="tabTextColor">#6b7984</item>
        <!--<item name="tabPaddingEnd">12dp</item>-->
        <item name="tabSelectedTextColor">#f7554a</item>
    </style>
</resources>

三盯荤、drawable圖形文件
tab1.xml

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

    <item android:drawable="@drawable/ico_1" />
</selector>

其他如圖所示:

drawable.png

四馋吗、layout布局文件

  1. activity_mian.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.MainActivity"
    android:clipToPadding="true"
    android:fitsSystemWindows="true">

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

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:src="#bfbfbf"/>

    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tab"
        app:tabBackground="@color/tab_background"
        app:tabMode="fixed"
        app:tabGravity="fill"
        style="@style/MyCustomTabLayout" />

</LinearLayout>

2.建立五個(gè)fragment布局文件
如圖所示:

fragment_blank_fragment2.xml圖.png

五、建立ViewPager適配器(MyFragmentPagerAdapter)

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{


    private List<Fragment>fragmentList;
    private String[] titles;


    public MyFragmentPagerAdapter(FragmentManager fragmentManager, List<Fragment>fragmentList, String[] titles){
        super(fragmentManager);
        this.fragmentList = fragmentList;
        this.titles = titles;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

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

}

六秋秤、生成五個(gè)BlankFragment
如圖:

BlankFragment2.png

七宏粤、最主要的一步
MainActivity

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化各控件
        initView();
    }
    /**
     * 初始化各控件
     */
    private void initView(){

        //獲取數(shù)據(jù) 在values/arrays.xml中進(jìn)行定義然后調(diào)用
        String[] tabTitle = getResources().getStringArray(R.array.tab_titles);
        //將fragment裝進(jìn)列表中
        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new BlankFragment1());
        fragmentList.add(new BlankFragment2());
        fragmentList.add(new BlankFragment3());
        fragmentList.add(new BlankFragment4());
        fragmentList.add(new BlankFragment5());
        //聲明viewPager
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        //viewpager加載adapter
        viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList, tabTitle));
        //viewPager事件
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {


            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        //定義TabLayout
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab);
        //TabLayout的事件
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //選中了tab的邏輯
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                //未選中tab的邏輯
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                //再次選中tab的邏輯
            }
        });
        //TabLayout加載viewpager
        //一行代碼和ViewPager聯(lián)動(dòng)起來(lái),簡(jiǎn)單粗暴灼卢。
        tabLayout.setupWithViewPager(viewPager);
        Drawable d = null;
        for (int i = 0; i < tabLayout.getTabCount(); i++){
            TabLayout.Tab tab = tabLayout.getTabAt(i);
            switch (i){
                case 0:
                    d = getResources().getDrawable(R.drawable.tab1);
                    break;
                case 1:
                    d = getResources().getDrawable(R.drawable.tab2);
                    break;
                case 2:
                    d = getResources().getDrawable(R.drawable.tab3);
                    break;
                case 3:
                    d = getResources().getDrawable(R.drawable.tab4);
                    break;
                case 4:
                    d = getResources().getDrawable(R.drawable.tab5);
                    //tintManager.setStatusBarTintResource(R.color.colorAccent);
                    break;
            }
            tab.setIcon(d);
        }


    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍哎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芥玉,更是在濱河造成了極大的恐慌蛇摸,老刑警劉巖备图,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灿巧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡揽涮,警方通過(guò)查閱死者的電腦和手機(jī)抠藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蒋困,“玉大人盾似,你說(shuō)我怎么就攤上這事。” “怎么了零院?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵溉跃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我告抄,道長(zhǎng)撰茎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任打洼,我火速辦了婚禮龄糊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘募疮。我一直安慰自己炫惩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布阿浓。 她就那樣靜靜地躺著他嚷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芭毙。 梳的紋絲不亂的頭發(fā)上爸舒,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音稿蹲,去河邊找鬼扭勉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苛聘,可吹牛的內(nèi)容都是我干的涂炎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼设哗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唱捣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起网梢,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤震缭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后战虏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拣宰,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年烦感,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巡社。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡手趣,死狀恐怖晌该,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤朝群,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布燕耿,位于F島的核電站,受9級(jí)特大地震影響姜胖,放射性物質(zhì)發(fā)生泄漏缸棵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一谭期、第九天 我趴在偏房一處隱蔽的房頂上張望堵第。 院中可真熱鬧,春花似錦隧出、人聲如沸踏志。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)针余。三九已至,卻和暖如春凄诞,著一層夾襖步出監(jiān)牢的瞬間圆雁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工帆谍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伪朽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓汛蝙,卻偏偏與公主長(zhǎng)得像烈涮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窖剑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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