Viewpager结合fragment实现底部导航

Posted 北宫风晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Viewpager结合fragment实现底部导航相关的知识,希望对你有一定的参考价值。

具体实现如下:

 

FindFragment.java

package fbtt.com.fbtt.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import fbtt.com.fbtt.R;

/**
 * Created by Administrator on 2016/5/23.
 */
public class FindFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.tab_find_fragment, container, false);
    }
}

 

R.layout.tab_find_fragment:

<?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="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="find"
        android:textSize="40sp"/>

</LinearLayout>

 

其余对应的MainFragmentMyFragment两个都是相同的。

 

 

TabFragmentPagerAdapter类:
package fbtt.com.fbtt.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

/**
 * Created by Administrator on 2016/5/23.
 */
public class TabFragmentPagerAdapter extends FragmentPagerAdapter {

    //继承FragmentPagerAdapter类 ,并自定义的构造器
    private List<Fragment> fragments;
    public TabFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragments) {
        super(fm);
        this.fragments =fragments;
    }

    @Override
    public Fragment getItem(int position) {


        return fragments.get(position);

    }

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

}

 

 

tab_main_viewpager.xml:

<?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="match_parent"
    android:orientation="vertical">

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

    <include layout="@layout/tab_buttom" />

</LinearLayout>

 

tab_buttom.xml:

 

<?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="wrap_content"

    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/id_tab_main"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:layout_marginTop="@dimen/image_magin_size_10dp"
        android:layout_marginBottom="@dimen/image_magin_size_5dp"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/ib_tab_main_icon_grey"
            android:layout_width="@dimen/image_size_27dp"
            android:layout_height="@dimen/image_size_27dp"
            android:background="#00000000"
            android:clickable="false"
            android:src="@drawable/tab_main_icon_grey" />

        <TextView
            android:id="@+id/tv_tab_main_icon_grey"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/image_magin_size_5dp"
            android:text="首頁"
            android:textColor="@color/shouye_tab_grep" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/id_tab_find"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:layout_marginTop="@dimen/image_magin_size_10dp"
        android:layout_marginBottom="@dimen/image_magin_size_5dp"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/ib_tab_find_icon_grey"
            android:layout_width="@dimen/image_size_26dp"
            android:layout_height="@dimen/image_size_26dp"
            android:background="#00000000"
            android:clickable="false"
            android:src="@drawable/tab_find_icon_grey" />

        <TextView
            android:id="@+id/tv_tab_find_icon_grey"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/image_magin_size_5dp"
            android:text="發現"
            android:textColor="@color/shouye_tab_grep" />
    </LinearLayout>

    <LinearLayout
        android:layout_marginTop="@dimen/image_magin_size_10dp"
        android:layout_marginBottom="@dimen/image_magin_size_5dp"
        android:id="@+id/id_tab_my"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/ib_tab_my_icon_grey"
            android:layout_width="@dimen/image_size_25dp"
            android:layout_height="@dimen/image_size_25dp"
            android:background="#00000000"
            android:clickable="false"
            android:src="@drawable/tab_my_icon_grey" />

        <TextView
            android:id="@+id/tv_tab_my_icon_grey"
            android:layout_marginTop="@dimen/image_magin_size_5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的"
            android:textSize="15sp"
            android:textColor="@color/shouye_tab_grep" />
    </LinearLayout>


</LinearLayout>

 

 

MainActivity.java为主要的实现:

package fbtt.com.fbtt.activity;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;

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

import fbtt.com.fbtt.R;
import fbtt.com.fbtt.fragment.FindFragment;
import fbtt.com.fbtt.fragment.MainFragment;
import fbtt.com.fbtt.fragment.MyFragment;
import fbtt.com.fbtt.adapter.TabFragmentPagerAdapter;

public class MainActivity extends FragmentActivity implements View.OnClickListener{

    private Locale myLocale;

    private LinearLayout id_tab_main;
    private LinearLayout id_tab_find;
    private LinearLayout id_tab_my;
    private ImageButton ib_tab_main_icon_grey;
    private ImageButton ib_tab_find_icon_grey;
    private ImageButton ib_tab_my_icon_grey;
    private TextView tv_tab_main_icon_grey;
    private TextView tv_tab_find_icon_grey;
    private TextView tv_tab_my_icon_grey;
    private ViewPager mViewPager;

    private List<Fragment> mFragments;

    private TabFragmentPagerAdapter mAdapter;
    int shouyeRed=0;
    int shouyeGrep=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab_main_viewpager);
        shouyeRed=getResources().getColor(R.color.shouye_tab_red);
        shouyeGrep=getResources().getColor(R.color.shouye_tab_grep);

        initView();
        initClickListener();
        setSelect(0);



    }

    private void initClickListener() {

        id_tab_main.setOnClickListener(this);
        id_tab_find.setOnClickListener(this);
        id_tab_my.setOnClickListener(this);

    }


    private void initView() {
        mViewPager= (ViewPager) findViewById(R.id.tab_main_viewpager);
        id_tab_main= (LinearLayout) findViewById(R.id.id_tab_main);
        id_tab_find= (LinearLayout) findViewById(R.id.id_tab_find);
        id_tab_my= (LinearLayout) findViewById(R.id.id_tab_my);
        ib_tab_main_icon_grey= (ImageButton) findViewById(R.id.ib_tab_main_icon_grey);
        ib_tab_find_icon_grey= (ImageButton) findViewById(R.id.ib_tab_find_icon_grey);
        ib_tab_my_icon_grey= (ImageButton) findViewById(R.id.ib_tab_my_icon_grey);
        tv_tab_main_icon_grey= (TextView) findViewById(R.id.tv_tab_main_icon_grey);
        tv_tab_find_icon_grey=(TextView) findViewById(R.id.tv_tab_find_icon_grey);
        tv_tab_my_icon_grey=(TextView) findViewById(R.id.tv_tab_my_icon_grey);
        mFragments = new ArrayList<Fragment>();
        Fragment mTab_01 = new MainFragment();
        Fragment mTab_02 = new FindFragment();
        Fragment mTab_03 = new MyFragment();
        mFragments.add(mTab_01);
        mFragments.add(mTab_02);
        mFragments.add(mTab_03);
        mAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), mFragments);
        mViewPager.setAdapter(mAdapter);

        //设置滑动监听器

        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            //滑动时 改变图标状态
            @Override
            public void onPageSelected(int position) {
                int currentItem = mViewPager.getCurrentItem();
                initTabImage();
                switch (currentItem) {
                    case 0:
                        ib_tab_main_icon_grey.setImageResource(R.drawable.tab_main_icon_red);
                        tv_tab_main_icon_grey.setTextColor(shouyeRed);
                        break;
                    case 1:
                        ib_tab_find_icon_grey.setImageResource(R.drawable.tab_find_icon_red);
                        tv_tab_find_icon_grey.setTextColor(shouyeRed);
                        break;
                    case 2:
                        ib_tab_my_icon_grey.setImageResource(R.drawable.tab_my_icon_red);
                        tv_tab_my_icon_grey.setTextColor(shouyeRed);
                        break;

                }
            }
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }

    //初始的图标状态(滑动和点击事件改变的时候都要初始化)
    private void initTabImage() {
        ib_tab_main_icon_grey.setImageResource(R.drawable.tab_main_icon_grey);
        tv_tab_main_icon_grey.setTextColor(shouyeGrep);
        ib_tab_find_icon_grey.setImageResource(R.drawable.tab_find_icon_grey);
        tv_tab_find_icon_grey.setTextColor(shouyeGrep);
        ib_tab_my_icon_grey.setImageResource(R.drawable.tab_my_icon_grey);
        tv_tab_my_icon_grey.setTextColor(shouyeGrep);
    }




    public void changeLang(String lang){

        if (lang.equalsIgnoreCase("")){

            return;
        }

        myLocale = new Locale(lang);
        saveLocale(lang);
        Locale.setDefault(myLocale);
        Configuration config=new Configuration();
        config.locale=myLocale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
        updateTexts();
    }


    public void saveLocale(String lang) {
        String langPref = "Language";
        SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(langPref, lang);
        editor.commit();
    }



    private void updateTexts() {

    }


    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.id_tab_main:
                //注意上面修改的只是图标的状态,还要修改相对应的fragment;
                setSelect(0);
                break;
            case R.id.id_tab_find:
                setSelect(1);
                break;
            case R.id.id_tab_my:
                setSelect(2);
                break;
        }

    }

    //设置将点击的那个图标为亮色,切换内容区域
    private void setSelect(int i) {

        initTabImage();
        switch (i) {
            case 0:
                ib_tab_main_icon_grey.setImageResource(R.drawable.tab_main_icon_red);
                tv_tab_main_icon_grey.setTextColor(shouyeRed);
                break;
            case 1:
                ib_tab_find_icon_grey.setImageResource(R.drawable.tab_find_icon_red);
                tv_tab_find_icon_grey.setTextColor(shouyeRed);
                break;
            case 2:
                ib_tab_my_icon_grey.setImageResource(R.drawable.tab_my_icon_red);
                tv_tab_my_icon_grey.setTextColor(shouyeRed);
                break;
            default:
                break;
        }
        mViewPager.setCurrentItem(i);
    }
}

 

 

效果截图:

 

 

以上是关于Viewpager结合fragment实现底部导航的主要内容,如果未能解决你的问题,请参考以下文章

首页-底部Tab导航(菜单栏)的实现:FragmentTabHost+ViewPager+Fragment

Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

Android开发----生成Android底部导航栏

BottomNavigationView+ViewPager+Fragment 底部导航按钮 kotlin版本

BottomNavigationView+ViewPager+Fragment 底部导航按钮 kotlin版本

底部导航片段中的 Viewpager2