TabLayout标题和Fragment联动

1.导包design

implementation 'com.android.support:design:26.1.0'


2.主布局

如果Tab标题想要平均分配宽度就添加这些属性 

            app:tabMaxWidth="0dp"
            app:tabGravity="fill"
            app:tabMode="fixed"

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="comqq.example.hasee.myapplication.MainActivity"
    android:orientation="horizontal">
    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:id="@+id/tl"
        android:background="#fff342"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabIndicatorHeight="4dp"
        //点击选中时文字改变颜色
        app:tabSelectedTextColor="@color/colorAccent"
        app:tabTextColor="#000000">

    </android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>

</LinearLayout>

<!--是否可以滚动,默认fixed:app:tabMode="scrollable/fixed"-->  
    <!--指示器高度:app:tabIndicatorHeight="4dp"-->  
    <!--底部的横杆指示器的颜色:app:tabIndicatorColor="#3381f5"-->  
    <!--tab被选中的字体颜色:app:tabSelectedTextColor="#f00"-->  
    <!--tab默认的字体颜色:app:tabTextColor="#c4bfbf"-->  
    <!--tab字体的样式:app:tabTextAppearance="@style/MyCustomTabTextAppearance"-->  
    <!--tablayout的背景色:app:tabBackground="@color/greenLight" 和android:backgroud是一样的效果-->  
    <!--下面都是tab的padding设置:-->  
    <!--app:tabPadding="5dp"-->  
    <!--app:tabPaddingBottom="5dp"-->  
    <!--app:tabPaddingEnd="5dp"-->  
    <!--app:tabPaddingStart="5dp"-->  
    <!--app:tabPaddingTop="5dp"-->  
    <!--TabLayout布局的位置:app:tabGravity="center/fill" center:整体居中显示;fill:占满父布局,当然还和layout_width相关-->  
    <!--tablayout距离start的距离:app:tabContentStart="100dp"-->  
    <!--tab的最大宽度:app:tabMaxWidth="100dp"-->  
    <!--tab的最小宽度:app:tabMinWidth="50dp"-->  

设置Tab平分宽度
top_table.setTabMode(TabLayout.MODE_FIXED);不在起作用。
效果如图:

此时的解决办法,设置
app:tabMaxWidth="0dp" 此值即可解决
<android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMaxWidth="0dp"
            app:tabGravity="fill"
            app:tabMode="fixed" />




3.Fragment代码

public class BlankFragment extends Fragment {


    public BlankFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.fragment_blank, container, false);
        TextView tv1 = inflate.findViewById(R.id.tv1);
        String string = getArguments().getString("key");
        tv1.setText(string);
        return inflate;
    }

}





4.Fragment布局

<FrameLayout 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"
    tools:context="comqq.example.hasee.myapplication.BlankFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />

</FrameLayout>




5.主函数

public class MainActivity extends AppCompatActivity {
    private ViewPager vp;
    private TabLayout tl;
    private ArrayList<Fragment> arr;
    private ArrayList<String> arr2;
    private spq sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp= (ViewPager) findViewById(R.id.vp);
        tl= (TabLayout) findViewById(R.id.tl);
        arr=new ArrayList<>();
        arr2=new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            BlankFragment blan = new BlankFragment();
            Bundle bundle = new Bundle();
            bundle.putString("key","第"+i+"页");
            blan.setArguments(bundle);
            arr.add(blan);
        }
         sp = new spq(getSupportFragmentManager(), arr, arr2);
        vp.setAdapter(sp);
        tl.setupWithViewPager(vp);
//        设置tablayout为滚动模式
        tl.setTabMode(TabLayout.MODE_SCROLLABLE);
 }
    public void start(View view) {
        //        删除tablayout对应的指定标签
//        tablayout.removeTabAt(4);
        //        按钮点击事件,点击删除viewpager的某一个页面
        sp.removePos(4);
    }
}






6.Fragment适配器

public class spq extends FragmentPagerAdapter {
    private ArrayList<Fragment> arr;
    private ArrayList<String> arr2;

    public spq(FragmentManager fm, ArrayList<Fragment> arr, ArrayList<String> arr2) {
        super(fm);
        this.arr = arr;
        this.arr2 = arr2;
    }

    @Override
    public Fragment getItem(int position) {
        return arr.get(position);
    }

    @Override
    public int getCount() {
        return arr.size();
    }
    
    public void removePos(int pos){
        arr.remove(pos);
        arr2.remove(pos);
        this.notifyDataSetChanged();   //数据源发生变化,提醒更新
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return arr2.get(position);
    }

}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值