前两篇文章中介绍了TabLayout和ViewPgaer+Fragment的使用,这篇文章将三者结合起来,做成一个比较常见的布局,如图:

如果对着这两者有什么不清楚的,可以看看这两篇,都是一些简单的使用。

TabLayout的使用

ViewPager+Fragment的简单使用

废话不多说,直接上代码。

要使用TabLayout,必须先在app的build.gradle中添加:

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

在主布局中添加TabLayout和ViewPager

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"xmlns:android="http://schemas.android.com/apk/res/android"><android.support.design.widget.TabLayoutandroid:id="@+id/tab"android:layout_width="fill_parent"android:layout_height="wrap_content"app:tabIndicatorColor="@color/colorPrimaryDark"app:tabSelectedTextColor="@color/colorPrimary"app:tabTextColor="@color/colorAccent" /><android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/vp"></android.support.v4.view.ViewPager>
</LinearLayout>

创建两个Fragement类

fragment1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorAccent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="fragment1"/>
</LinearLayout>

fragment2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorPrimary"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="fragment2"/></LinearLayout>

Fragment1.class

public class Fragment1 extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view= inflater.inflate(R.layout.fragment1, container, false);return view;}
}

Fragment2.class

public class Fragment1 extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view= inflater.inflate(R.layout.fragment2, container, false);return view;}
}

创建ViewPager的适配器

FragAdapter.calss

public class FragAdapter extends FragmentPagerAdapter {private List<Fragment> fragmentList;private List<String> title;public FragAdapter(FragmentManager fm,List<Fragment> fragments,List<String> titles) {super(fm);fragmentList = fragments;title = titles;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return fragmentList.size();}@Overridepublic CharSequence getPageTitle(int position) {return title.get(position);}
}

其中getPageTitle方法是获取标题的。

MainActivity中

public class MainActivity extends AppCompatActivity {private TabLayout mTabLayout;//标题列表ArrayList<String> titleList= new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//构造适配器List<Fragment> fragments=new ArrayList<Fragment>();fragments.add(new Fragment1());fragments.add(new Fragment2());titleList.add("武侠");titleList.add("科幻");FragAdapter adapter = new FragAdapter(getSupportFragmentManager(), fragments,titleList);//设定适配器ViewPager vp = (ViewPager)findViewById(R.id.vp);vp.setAdapter(adapter);mTabLayout= (TabLayout) findViewById(R.id.tab);mTabLayout.setupWithViewPager(vp);}
}

到此,最简单的使用方法就结束了。当然,TabLayout的样式属性有很多,大家可以试着修改一下,做出自己想要的标题。还有就是TabLayout的属性中没有修改下划线宽度的方法,需要我们自己去写代码修改。这个我在后面的文章中会补充的。

最后附上遇到的一个小问题:

ClassNotFoundException: Didn't find class "android.support.v7.internal.widget.TintManager

就是这句代码:indiactor.setupWithViewPager(vpnewInfo);
在给TabLayout关联ViewPager的时候报错,

在引入design包的时候,版本要和appcompat版本一致。

compile 'com.android.support:design:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'

ViewPager简单介绍(三) ViewPager+Fragment+TabLayout相关推荐

  1. ViewPager简单介绍(二)ViewPager+Fragment

    实现ViewPager要适配器,一般的使用PagerAdapter,对于fragment,我们所使用的是FragmentPagerAdapter和FragmentPagerStateAdapter. ...

  2. ViewPager简单介绍(一)

    一.ViewPager是什么 官方介绍是: Layout manager that allows the user to flip left and right through pages of da ...

  3. 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找

    C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...

  4. XAPIAN简单介绍(三)

    今天主要介绍的是Xapian::Database这个类.先上图 看上去就非常恐怖的吧,我们一点点的说. 首先一切的開始都来自那个include目录中的database.h,他的直接实现是在omdata ...

  5. git 命令 简单介绍

    爱无路,恨无情.相思无缘,相爱无份.曾相识,恨离别.无风雨,无同舟,何结果.情远天边,心无挂碍,唯爱你独一. git简单介绍 三个区 工作区(working diretory) 用于修改文件 缓存区( ...

  6. 拉项目--球球世道的总结-解决了viewpager+fragment+tablayout 两个bug

    一:立项 1,创新新的项目 2,引入module   (这些都是我自己项目整的) -----fragmentation -----fragmentation_swipeback -----uibase ...

  7. Android Fragment(三)ListFragment简单介绍以及Fragment之间通信

    一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...

  8. android 弹出fragment,Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...

  9. Android ViewPager简单实现 - 倒计时、引导页左右滑动

    说明: ViewPager简单实现,方便以后用.做的是一个全屏的引导页. 截图: 代码: GuideActivity.java package com.xinyan.personal.ui.activ ...

最新文章

  1. Delphi指针用法
  2. 构建现代Web应用时究竟是选择传统web应用还是SPA
  3. (pytorch-深度学习)实现稠密连接网络(DenseNet)
  4. 宿命传说2之女神召唤java_热血传奇:传奇那些传说中的秘密,连骨灰级的玩家都未必知道...
  5. Java后台通过jxl生成Excel表格
  6. 艺术美的价值是什么?
  7. 还敢吹「毫无PS痕迹」?小心被Adobe官方AI打脸
  8. webpack笔记_(1)_webpack 安装
  9. 测试总结(部分)---转载
  10. Android系统信息获取 之十四:获取WIFI热点相关信息
  11. 开源机器学习项目的简单介绍
  12. Unity3D之快捷键大全
  13. html有序列表标签圆点,什么是无序列表、有序列表、定义列表?html列表标签学习笔记...
  14. SAP 固定资产主数据
  15. Hive基础学习文档和入门教程
  16. 推特开发者账号的申请流程
  17. WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
  18. Java安装环境变量
  19. 【时空】冰与火之歌一文弄懂时间复杂度与空间复杂度
  20. 七龙纪2-戒指和项链属性说明

热门文章

  1. android 系统的组成,简析Android 的GUI 系统组成
  2. 盘点PDF文件转Word文档的四种高效率转换方法
  3. STC15W408AS的485串口实现自发自收
  4. 《古剑奇谭WEB》值得期待的三大理由
  5. 成功解决:Updates were rejected because the tip of your current branch is behind its remote...【解决方法】
  6. 浅谈MB、Mb、MBps、Mbps - 计算机常识
  7. 图基准数据集(OGB)
  8. JS 每日一题 #13
  9. 【Python】socket编程——使用UDP协议打造在线时间服务器
  10. 非理工科编程零基础文科生秒懂python学习笔记:pandas库数据表格创建和运算基础有哪些?