先上效果图:
1、 编写 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" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res-auto" > <!-- //导航栏背景颜色 android:background="#ffff00" //指示器颜色 app:tabIndicatorColor="#66ff33" //指示器高度 app:tabIndicatorHeight="20p" //普通状态下文字的颜色 app:tabTextColor="@color/colorPrimary" //选中时文字的颜色 app:tabSelectedTextColor="#CC33FF" //是否可滑动:fixed:固定;scrollable:可滑动 app:tabMode="fixed" //设置选项卡的背景:此处要写一个selector) app:tabBackground="@drawable/selected" //设置字体大小:此处要写一个style) app:tabTextAppearance="@style/MyTabLayoutTextAppearance" --> <!--android.support.design.widget.TabLayout 可以制作动画效果的tablayout --> <android.support.design.widget.TabLayout android:id="@+id/fragment_tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorHeight="10dp" app:tabTextColor="@color/colorAccent" app:tabSelectedTextColor="@android:color/white" app:tabMode="scrollable" app:tabBackground="@drawable/main_center_mainpage_tablayout_tabbackground_selector" /> <android.support.v4.view.ViewPager android:id="@+id/fragment_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </android.support.v4.view.ViewPager> </LinearLayout>
2、在java文件中加载布局并编写适配器
1 package com.example.dell.newscenter.myview; 2 3 4 import android.app.Activity; 5 import android.content.Context; 6 import android.graphics.Color; 7 import android.support.annotation.Nullable; 8 import android.support.design.widget.TabLayout; 9 import android.support.v4.app.Fragment; 10 import android.support.v4.app.FragmentManager; 11 import android.support.v4.app.FragmentPagerAdapter; 12 import android.support.v4.view.ViewPager; 13 import android.support.v7.app.AppCompatActivity; 14 import android.util.AttributeSet; 15 import android.util.Log; 16 import android.view.LayoutInflater; 17 import android.view.ViewGroup; 18 import android.widget.LinearLayout; 19 20 import com.example.dell.newscenter.R; 21 22 23 import java.util.ArrayList; 24 25 import static android.support.constraint.Constraints.TAG; 26 27 public class FragmentLayout extends LinearLayout { 28 private AppCompatActivity context; 29 private TabLayout tabLayout = null;// 上部放置 tablayout 30 private ViewPager viewPager = null;// 下部放置 viewPager 31 private Fragment[] fragments = {new Fragment(), new Fragment(), new Fragment()}; 32 private String titles[] = {"直播", "推荐", "追番"}; 33 private ArrayList<TabLayout.Tab> tabs = new ArrayList<>(); 34 private MyFragmentAdapter myFragmentAdapter ; 35 // 一定要使用带Attribute的构造器 ,否则acvitity会报错 36 public FragmentLayout(Context context, @Nullable AttributeSet attrs) { 37 super(context, attrs); 38 this.context = (AppCompatActivity) context; 39 LayoutInflater.from(context).inflate(R.layout.fragmentlayout, this); 40 tabLayout = findViewById(R.id.fragment_tablayout); 41 viewPager = findViewById(R.id.fragment_viewpager); 42 // initFragmentLayout(); 43 setParam(); 44 } 45 46 private void setParam() { 47 Log.d(TAG, "初始化Fragment: " + context); 48 // 使用适配器将ViewPager与Fragment绑定在一起 49 myFragmentAdapter = new MyFragmentAdapter(context.getSupportFragmentManager()); 50 viewPager.setAdapter(myFragmentAdapter); 51 //将TabLayout 与viewPager绑定在一起 52 tabLayout.setupWithViewPager(viewPager); 53 // // 指定tab 的位置 54 // int count = tabLayout.getTabCount(); 55 // Log.d(TAG, "count: " + count); 56 } 57 58 public void initFragmentLayout() { 59 60 /** 61 * 62 * 设置 tableyout 属性 63 */ 64 //设置颜色 65 tabLayout.setTabTextColors(Color.RED, Color.WHITE); 66 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);// 设置标题是否能滑动 67 tabLayout.setMinimumHeight(10); 68 tabLayout.setSelectedTabIndicatorHeight(15); 69 70 /** 71 * 72 * 设置 viewPager 属性 73 */ 74 75 this.addView(tabLayout); 76 this.addView(viewPager); 77 } 78 public void setFragments(Fragment[] fragments) { 79 this.fragments = fragments; 80 } 81 public void setTitles(String[] titles) { 82 this.titles = titles; 83 } 84 public void setTabs(ArrayList<TabLayout.Tab> tabs) { 85 this.tabs = tabs; 86 } 87 public Fragment[] getFragments() { 88 return fragments; 89 } 90 public String[] getTitles() { 91 return titles; 92 } 93 public ArrayList<TabLayout.Tab> getTabs() { 94 return tabs; 95 } 96 /** 97 * 适配器 98 */ 99 public class MyFragmentAdapter extends FragmentPagerAdapter { 100 public MyFragmentAdapter(FragmentManager fm) { 101 super(fm); 102 } 103 @Override 104 public Fragment getItem(int position) { 105 return fragments[position]; 106 } 107 @Override 108 public int getCount() { 109 return titles.length; 110 } 111 @Override 112 public CharSequence getPageTitle(int position) { 113 return titles[position]; 114 } 115 } 116 }
3、调用
<com.example.dell.newscenter.myview.FragmentLayout android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.dell.newscenter.myview.FragmentLayout>