1. 程式人生 > >用TabLayout實現底部導航欄

用TabLayout實現底部導航欄

效果圖 有點大 沒弄好


下面我們來實現這個效果

1、在app的build.gradle中新增這行

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

然後看我的佈局檔案

main.xml

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/activity_main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="halewang.com.bangbang.MainActivity">

    <halewang.com.bangbang.widght.MainViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    </halewang.com.bangbang.widght.MainViewPager>

    <android.support.design.widget.TabLayout
        android:id="@+id/tablayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="@null"
        app:tabSelectedTextColor="#FF9100"
        app:tabTextColor="#707070"
        app:tabMode="fixed">

    </android.support.design.widget.TabLayout>


</LinearLayout>
然後我們的點選效果用selector實現

tab_home_selector.xml

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

主介面用的是自定義ViewPager,這個ViewPager禁用了它的滑動事件,然後我們在TabLayout的點選事件中切換介面。
private void initTabLayout(){
        mTabs = new ArrayList<>();
        mTabs.add("首頁");
        mTabs.add("榜單");
        mTabs.add("我");
	//這裡就是給tab設定點選效果
        mTabLayout.addTab(mTabLayout.newTab().setText(mTabs.get(0)).setIcon(R.drawable.tab_home_selector));
        mTabLayout.addTab(mTabLayout.newTab().setText(mTabs.get(1)).setIcon(R.drawable.tab_list_selector));
        mTabLayout.addTab(mTabLayout.newTab().setText(mTabs.get(2)).setIcon(R.drawable.tab_mine_selector));
        mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                int position = tab.getPosition();
                mViewPager.setCurrentItem(position,true);
            }

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

            }

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

            }
        });
    }

然後隨便給ViewPager填充幾個介面就可以實現剛才的效果了。

還有一種將TabLayout和ViewPager相關聯的方法,不用給TabLayout設定點選事件也可以和ViewPager產生聯絡。

private void initViewPager(){
        mViewPager = getMView().getViewPager();
        mViewPager.setOffscreenPageLimit(4);
        mFragments = new ArrayList<>();
        mFragments.add(new DayFragment());
        mFragments.add(new WeekFragment());
        mFragments.add(new MonthFragment());

        MainActivity activity = (MainActivity) mContext;
        ListPagerAdapter mAdapter = new ListPagerAdapter(activity.getSupportFragmentManager(), mFragments, mItems);
        mViewPager.setAdapter(mAdapter);
        mTabLayout.setupWithViewPager(mViewPager);
        mTabLayout.setTabsFromPagerAdapter(mAdapter);
    }

這樣在ViewPager滑動的時候,TabLayout中的選項卡也會跟著滑動。

推薦一個公眾號,不吐槽,不毒舌,偶爾發發文章,偶爾推薦好物,歡迎關注