效果图如下

首先,要使用控件需要添加design library,在Android Studio中添加

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

然后是布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.lg.tablayoutdemo.MainActivity"> <android.support.design.widget.TabLayout
android:id="@+id/tab_layou"
android:layout_width="match_parent"
app:tabIndicatorColor="@android:color/holo_blue_light"
app:tabTextColor="@android:color/darker_gray"
app:tabSelectedTextColor="@android:color/black"
android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_below="@id/tab_layou"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>

其中TabLayout中tabIndicatorColor属性为标签底部下滑线颜色,tabTextColor为标签未选中时字体颜色,tabSelectedTextColor为选中时字体颜色

自定一个FragmentPagerAdapter适配器

public class MyViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
private String[] titles; public MyViewPagerAdapter(FragmentManager fm, String[] titles, List<Fragment> fragments) {
super(fm);
this.titles = titles;
this.fragments = fragments;
} @Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);
} @Override
public CharSequence getPageTitle(int position) {
return titles[position];
} @Override
public int getCount() {
return fragments.size();
}
}

Fragment代码我就不贴了,会在下面奉上源码地址

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
private TabLayout tabLayout;
private ViewPager viewPager;
private MyViewPagerAdapter viewPagerAdapter;
//TabLayout标签
private String[] titles=new String[]{"ANDROID","JAVA","C#","PHP"};
private List<Fragment> fragments=new ArrayList<>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
} private void init(){
tabLayout=(TabLayout)findViewById(R.id.tab_layou);
viewPager=(ViewPager)findViewById(R.id.view_pager);
//设置TabLayout标签的显示方式
tabLayout.setTabMode(TabLayout.MODE_FIXED);
//循环注入标签
for (String tab:titles){
tabLayout.addTab(tabLayout.newTab().setText(tab));
}
//设置TabLayout点击事件
tabLayout.setOnTabSelectedListener(this); fragments.add(new AndroidFragment());
fragments.add(new JavaFragment());
fragments.add(new CshapFragment());
fragments.add(new PhpFragment());
viewPagerAdapter=new MyViewPagerAdapter(getSupportFragmentManager(),titles,fragments);
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
} @Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
} @Override
public void onTabUnselected(TabLayout.Tab tab) { } @Override
public void onTabReselected(TabLayout.Tab tab) { }
}

以上是核心代码,至此功能就实现了,当然也可 以根据不同的需求进行改动

源码地址:http://down.51cto.com/data/2221954

Android 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换的更多相关文章

  1. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  2. Android随笔--使用ViewPager实现简单地图片的左右滑动切换

    Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布 ...

  3. Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...

  4. Fragment+ViewPager实现仿微信点击和滑动切换界面

    这是在我写的新闻App中实现的界面切换 贴出切换界面的主要代码: xml代码: <span style="font-size:14px;"> <android.s ...

  5. [置顶] xamarin Tablayout+Viewpager+Fragment顶部导航栏

    最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...

  6. Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  7. 011 Android TabLayout+ViewPager实现顶部滑动效果(多个页面)

    1.TabLayout介绍 TabLayout提供了一个水平的布局用来展示Tabs,很多应用都有这样的设计,典型的有网易新闻,简书,知乎等.TabLayout就可以很好的完成这一职责,首先TabLay ...

  8. Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现

    嘿嘿嘿,关于android滑动的操作,是不是经常都会用到呢. 我肯定也要学习一下啦. https://blog.csdn.net/u013184970/article/details/82882107 ...

  9. 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果

    本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...

随机推荐

  1. HISTFILESIZE与HISTSIZE的区别

    在linux系统中,history命令可以输出历史命令,历史命令默认保存在文件~/.bash_history中. HISTFILESIZE 与 HISTSIZE都是history命令需要用到的两个sh ...

  2. debug和release的区别

    Debug和Release,主要是针对其面向的目标不同的而进行区分的.Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序 ...

  3. 洛谷 P2183 巧克力

    P2183 巧克力 题目描述 佳佳邀请了M个同学到家里玩.为了招待客人,她需要将巧克力分给她的好朋友们.她有N(1<=N<=5000)块巧克力,但是大小各不一样,第i块巧克力大小为为1*X ...

  4. 洛谷 P2734 游戏 A Game

    P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...

  5. angularjs 路由 ngRoute tab切换

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  6. 31.ng-init 指令初始化 AngularJS 应用程序变量。

    转自:https://www.cnblogs.com/best/tag/Angular/ 1. <html> <head> <meta charset="utf ...

  7. js封装each函数

    function each(ele,callback){ if(Object.prototype.toString.call(ele) == "[object Array]"){ ...

  8. sql 除法运算 保留两位小数

    sql 除法运算 保留两位小数 SELECT 1530/60 select cast(1530*1./60 as decimal(18,1))

  9. Monad的基本运算

    A monad is created by defining a type constructor M and two operations, bind and return (where retur ...

  10. Java中将String转json对象

    import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple. ...