TabLayout和ViewPager的配合使用

效果如图:

         

 

 

1.因为TabLayout是Android Design Support Library官方库的一个控件,所以使用TabLayout时候需要先添加对该库的依赖

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

2.下面是TabLayout和ViewPager配合使用的布局

复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.cxk.myapplication.MainActivity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tablayout"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="#1FBCD2"
        app:tabTextAppearance="@style/MyTabLayoutTextAppearance"
        app:tabIndicatorColor="@color/white"
        app:tabSelectedTextColor="@color/white"
        app:tabTextColor="@color/ripple_material_dark"
        app:tabIndicatorHeight="2dp" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/tablayout"
        android:layout_weight="1" />

</RelativeLayout>
复制代码

注:

a.必须在根布局下写上 xmlns:app="http://schemas.android.com/apk/res-auto"这句代码,不然无法设置在布局中设置Tablayout的一些属性。

b.以下是Tablayout一些常用属性

app:tabIndicatorColor="@color/white"指示器颜色
app:tabIndicatorHeight="2dp"指示器的宽带
app:tabSelectedTextColor="@color/white"被选中时字体的颜色

app:tabTextColor="@color/ripple_material_dark"未被选中时字体的颜色
app:tabTextAppearance="@style/MyTabLayoutTextAppearance"改变字体的大小(在style.xml下面添加如下代码)
   <style name="MyTabLayoutTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textSize">16sp</item>
    </style>

 3.下面是TabLayout和ViewPager配合使用的JAVA代码

复制代码
public class MainActivity extends FragmentActivity {
    private TabLayout tablayout;
    private ViewPager viewpager;
    private List<Fragment> list;
    private FragmentManager manager;
    private FragmentTransaction transtion;
    private MyFragmentPageAdapter adapter;
    private List<String> titles;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //先findID
        tablayout = (TabLayout) this.findViewById(R.id.tablayout);
        viewpager = (ViewPager) this.findViewById(R.id.viewpager);
        //将各个标题装在titles里面
        titles = new ArrayList<String>();
        titles.add("第一个");
        titles.add("第二个");
        //将两个Fragment装进集合中
        list = new ArrayList<Fragment>();
        Fragment1 f1 = new Fragment1();
        Fragment2 f2 = new Fragment2();
        list.add(f1);
        list.add(f2);
        //使用manager和transtion提交事务后为viewpager设置一个适配器
        manager = getSupportFragmentManager();
        adapter = new MyFragmentPageAdapter(manager);
        transtion = manager.beginTransaction();
        transtion.commit();
        viewpager.setAdapter(adapter);
        // tablayout.addTab可以将标题添加进Tab里面,true表示默认选中
        tablayout.addTab(tablayout.newTab().setText(titles.get(0)), true);
        tablayout.addTab(tablayout.newTab().setText(titles.get(1)), false);
        //这两个方法是将Tablayout和Viewpager联合起来
        tablayout.setupWithViewPager(viewpager);
        tablayout.setTabsFromPagerAdapter(adapter);
    }

    // 定义一个适配器给ViewPager
    class MyFragmentPageAdapter extends FragmentPagerAdapter {

        public MyFragmentPageAdapter(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
        }

        @Override
        public android.support.v4.app.Fragment getItem(int arg0) {
            // TODO Auto-generated method stub
            return list.get(arg0);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return titles.get(position);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
             super.destroyItem(container, position, object);
        }

    }
}
复制代码

注:

1.getSupportManager使用该方法需要你继承FragmentActivity。
2.定义的新适配器需要重写getpagerTitle这个方法,不然标题显示不出来。


posted @   CKTim  阅读(1388)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示