自定义fragmentlayout

先上效果图:

  

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>

猜你喜欢

转载自www.cnblogs.com/the-wang/p/9004311.html