TabLayout实现底部导航栏(2)

如图:

 

首先我们在 build.gradle中引入 

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

首页

 

其实很简单,就是把TabLayout放到底部,上面是viewpager,然后给text设置个图片就行了。布局如下

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:id="@+id/three_viewpager"></android.support.v4.view.ViewPager>
    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/three_tablayout"
        app:tabBackground="@drawable/selector_bg"
        style="@style/MyCustomTabLayout"></android.support.design.widget.TabLayout>

</LinearLayout>

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">#aaa</item>
        <item name="tabPaddingEnd">12dp</item>
        <item name="tabSelectedTextColor">#f00</item>
    </style>

tabIndicatorHeight是设置导航那个指示器高度为0,因为不需要那个指示器了。然后app:tabBackground这个属性是设置单项的背景颜色的

selector_bg.xml文件:

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

colors.xml 文件

 <color name="lightgray">#FFEEEEEE</color>
    <color name="gray">#FFDDDDDD</color>

主要代码如下:

package com.example.tablayoutdemo;

import android.graphics.drawable.Drawable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;

public class ThreeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
        ViewPager viewPager = (ViewPager) findViewById(R.id.three_viewpager);
        TabLayout three_tablayout = (TabLayout) findViewById(R.id.three_tablayout);

        List<Fragment> fragments = new ArrayList<>();
        fragments.add(new ThreeFragment());
        fragments.add(new ThreeFragment());
        fragments.add(new ThreeFragment());
        fragments.add(new ThreeFragment());

        String [] titles = new String [] {"首页","流量","社区","关于"};

        //设置适配器
        TitleFragmentPagerAdapter adapter = new TitleFragmentPagerAdapter(getSupportFragmentManager(),fragments,titles);
        viewPager.setAdapter(adapter);
        //绑定
        three_tablayout.setupWithViewPager(viewPager);

        for(int i = 0; i < three_tablayout.getTabCount(); i++){
            TabLayout.Tab tab = three_tablayout.getTabAt(i);
            Drawable d = null;
            switch (i){
                case 0:
                    d = getResources().getDrawable(R.drawable.tab_menu_deal_home);
                    break;
                case 1:
                    d = getResources().getDrawable(R.drawable.tab_menu_deal_classify);
                    break;
                case 2:
                    d = getResources().getDrawable(R.drawable.tab_menu_deal_community);
                    break;
                case 3:
                    d = getResources().getDrawable(R.drawable.tab_menu_deal_user);
                    break;
            }
            tab.setIcon(d);
        }

    }
}
R.drawable.tab_menu_deal_classify 如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bottom_tab_classify_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/bottom_tab_classify_normal"></item>
</selector>

其它3个类似

TitleFragmentPagerAdapter 适配器:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;

public class TitleFragmentPagerAdapter extends FragmentPagerAdapter {

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

    public TitleFragmentPagerAdapter(FragmentManager fm, List<Fragment> mFragmentList) {
        super(fm);
        this.mFragmentList = mFragmentList;
    }

    /**
     * titles是给TabLayout设置title用的
     * @param fm
     * @param mFragmentList
     * @param titles
     */
    public TitleFragmentPagerAdapter(FragmentManager fm, List<Fragment> mFragmentList, String[] titles) {
        super(fm);
        this.mFragmentList = mFragmentList;
        this.titles = titles;
    }

    /**
     * 描述:获取索引位置的Fragment.
     * @param position
     * @return
     */
    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        if (position < mFragmentList.size()){
            fragment = mFragmentList.get(position);

        }else{
            fragment = mFragmentList.get(0);

        }
        return fragment;
    }

    /**
     * 返回viewpager对应的title。
     * @param position
     * @return
     */
    @Override
    public CharSequence getPageTitle(int position) {
        if (titles != null && titles.length>0){
            return titles[position];
        }
        return null;
    }

    /**
     * 描述:获取数量.
     * @return
     */
    @Override
    public int getCount() {
        return mFragmentList.size();
    }
}

完成。

 

转载于:https://www.cnblogs.com/wushanmanong/p/8878257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值