iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中TabLayout结合ViewPager实现页面切换
  • 603
分享到

Android中TabLayout结合ViewPager实现页面切换

tablayoutviewpagerAndroid 2022-06-06 05:06:00 603人浏览 八月长安
摘要

一、实现思路 1、在build.gradle中添加依赖,例如: compile 'com.Android.support:support-v4:23.4.0' compile

一、实现思路

1、在build.gradle中添加依赖,例如:

compile 'com.Android.support:support-v4:23.4.0'
compile 'com.android.support:design:23.4.0'

也可以将support-v4替换为appcompat-v7,例如:

compile 'com.android.support:appcompat-v7:23.4.0'

因为appcompat-v7是依赖于support-v4的。

更多说明可参考官方文档support library部分。

2、在xml中添加TabLayout和ViewPager,例如:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
       xmlns:tool="http://schemas.android.com/tools"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       tool:context=".TabViewActivity"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
  <android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/tabLayoutBackground"
    app:tabMode="scrollable"
    app:tabTextColor="@color/color_white"
    app:tabSelectedTextColor="@color/tabSelectedText"
    app:tabIndicatorHeight="3Dp"
    app:tabIndicatorColor="@color/color_white"/>
  <android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>

TabLayout:

(1)tabMode有两个属性,一个是"scrollable",用于多标签;另一个是"fixed",用于少标签,它会让全部标签平均分布在屏幕上,所以标签不能多,而且名称也不能长,否则会显示不完整。

(2)tabIndicator是指文本下的指示条。当选中一个tab时,指示条才会出现,出现在文本下面。

3、获取View对象


TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);

4、创建FragmentStatePagerAdaper的子类,并实现构造方法


  public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    public ViewPagerAdapter(FragmentManager fm) {
      super(fm);
    }
  }

 创建该类的一个实例对象

ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 

在这一步中,你可以选择是实现FragmentPagerAdapter的子类,或者是FragmentStatePagerAdapter的子类。

FragmentPagerAdapter用于页数较少的,也就Fragment的数量较少的,因为只要用户还停留在当前的Activity中,其中的Fragment都不会被销毁,所以内存消耗会比较大。

而FragmentStatePagerAdapter的工作原理类似于ListView,只要用户不可见的Fragment,都会被销毁,只保留它的状态。

因为我用的是v4兼容包下的Fragment,所以需要用getSupportFragmentManager()去获取FragmentManager。

5、设置ViewPager和TabLayout


 viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);

二、完善Adapter

1、重写三个方法


  public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    ......
    @Override
    public Fragment getItem(int position) {
      return null;
    }
    @Override
    public int getCount() {
      return 0;
    }
    @Override
    public CharSequence getPageTitle(int position) {
      return super.getPageTitle(position);
    }
  }

2、创建tab的标题数据:

 private String[] mTitles = new String[]{"语文", "英语", "数学", "物理", "生物", "化学", "地理", "政治", "历史"};

创建Fragment的子类:


public class ViewPagerFragment extends Fragment {
  private static final String KEY = "extra";
  private String mMessage;
  public ViewPagerFragment() {
  }
  public static ViewPagerFragment newInstance(String extra) {
    Bundle args = new Bundle();
    args.putString(KEY, extra);
    ViewPagerFragment fragment = new ViewPagerFragment();
    fragment.setArguments(args);
    return fragment;
  }
}

创建Fragment的集合对象,并添加实例对象到集合里:


private ArrayList<ViewPagerFragment> mViewPagerFragments = new ArrayList<>();
    ......
    for (int i = 0; i < mTitles.length; i++) {
      mViewPagerFragments.add(ViewPagerFragment.newInstance(mTitles[i]));
    }

 3、修改Adapter中的方法


public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private String[] titles;
    private ArrayList<ViewPagerFragment> viewPagerFragments;
    public ViewPagerAdapter(FragmentManager fm) {
      super(fm);
    }
    public void setTitles(String[] titles) {
      this.titles = titles;
    }
    public void setFragments(ArrayList<ViewPagerFragment> viewPagerFragments) {
      this.viewPagerFragments = viewPagerFragments;
    }
    @Override
    public Fragment getItem(int position) {
      return viewPagerFragments.get(position);
    }
    @Override
    public int getCount() {
      return viewPagerFragments.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
      return titles[position];
    }
  }

 4、将数据传给Adapter


 viewPagerAdapter.setTitles(mTitles);
viewPagerAdapter.setFragments(mViewPagerFragments); 

三、完善Fragment

1、fragment_view_pager_item.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">
  <TextView
    android:id="@+id/fragment_text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"/>
</LinearLayout>

2、完善Fragment的方法


public class ViewPagerFragment extends Fragment {
  ......
  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getArguments();
    if (bundle != null) {
      mMessage = bundle.getString(KEY);
    }
  }
  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_view_pager_item, container, false);
    TextView textView = (TextView) view.findViewById(R.id.fragment_text);
    textView.setText(mMessage);
    return view;
  }
}

在创建Fragment时,会调用onCreate方法,在其中执行一些状态信息的初始化,用于暂停或停止后的恢复所用。

在Fragment首次加载视图时,会调用onCreateView方法,在其中执行视图的加载和初始化,返回的应该是该Fragment布局的根视图。其中inflate方法的第三个参数代表的意思是,是否要将加载进来的布局(R.layout.fragment_view_pager_item)添加进container这个ViewGroup里。根据官方文档的说明,上例那样做的话,系统已经将这个布局添加进container了,所以这里为false。

 静态效果图:

您可能感兴趣的文章:anndroid使用ViewPager实现三个fragment切换Android使用TabLayou+fragment+viewpager实现滑动切换页面效果Android App中使用ViewPager+Fragment实现滑动切换效果Android基于ViewPager实现类似微信页面切换效果Android使用自定义PageTransfORMer实现个性的ViewPager动画切换效果Android实现单页显示3个Item的ViewPager炫酷切换效果Android使用ViewPager实现顶部tabbar切换界面Android ViewPager实现动画切换效果Android使用ViewPager快速切换Fragment时卡顿的优化方案


--结束END--

本文标题: Android中TabLayout结合ViewPager实现页面切换

本文链接: https://www.lsjlt.com/news/22772.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android开发之ViewPager实现滑动切换页面
    本文实例为大家分享了Android开发之ViewPager实现滑动切换页面的具体代码,供大家参考,具体内容如下 基本构件 activity_main.xml 依然是在简单的线性布局里...
    99+
    2024-04-02
  • Android使用ViewPager实现顶部tabbar切换界面
    类似的功能可以看看: 使用RadioGroup实现底部导航栏 进入正题效果图: 注:PagerSlidingTabStrip为自定义控件,用于切换界面,此处不便贴出代码 主界面xml布局中添加ViewPager控件: <android...
    99+
    2023-05-30
    viewpager tabbar 切换
  • android怎么实现页面左右切换
    Android中可以通过ViewPager实现页面的左右切换。以下是实现步骤:1. 在XML布局文件中添加ViewPager控件:`...
    99+
    2023-08-18
    android
  • android如何实现页面左右切换
    Android中实现页面左右切换可以通过ViewPager来实现。具体步骤如下:1. 在布局文件中添加ViewPager控件:```...
    99+
    2023-08-09
    android
  • Android中TabLayout+ViewPager 简单实现app底部Tab导航栏
    前言在谷歌发布Android Design Support Library之前,app底部tab布局的实现方法就有很多种,其中有RadioGroup+FrameLayout、TabHost+Fragment、FragmentPagerAda...
    99+
    2023-05-31
    android tablayout age
  • Android实现单页显示3个Item的ViewPager炫酷切换效果
    单页显示3个Item的ViewPager炫酷切换效果,适用于Banner等。效果图Rotate YRotate DownRotate UpAlphaScaleInScaleIn + Alpha + Rotate Down使用###(1)引入...
    99+
    2023-05-30
    android viewpager 切换
  • Android Compose页面切换动画怎么实现
    这篇文章主要介绍“Android Compose页面切换动画怎么实现”,在日常操作中,相信很多人在Android Compose页面切换动画怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android...
    99+
    2023-06-22
  • flutter实现切换页面缓存
    本文实例为大家分享了flutter实现切换页面缓存的具体代码,供大家参考,具体内容如下 一、实现底部导航栏切换页面缓存 实现底部导航栏切换页面缓存需要在pubspc.yamal中导入...
    99+
    2024-04-02
  • Android中怎么使用ViewPager2实现页面滑动切换效果
    这篇“Android中怎么使用ViewPager2实现页面滑动切换效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Andr...
    99+
    2023-06-29
  • vue中怎么实现点击切换页面
    本教程操作环境:windows7系统、vue3、Dell G3电脑。vue中怎么实现点击切换页面?Vue案例--点击按钮切换页面用vue的方式做一个切换页面的效果。思路:注册一个组件,并在父元素中使用。使用v-if 和 v-else 来控制...
    99+
    2022-11-22
    Vue
  • 怎么在Android中实现一个无网络页面切换功能
    怎么在Android中实现一个无网络页面切换功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现思路需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recy...
    99+
    2023-05-30
    android
  • Android应用中怎么实现一个滑动切换页面功能
    Android应用中怎么实现一个滑动切换页面功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 TabLayou 主要实现的是标题头的 滑动 这个 控件 类似于 Sc...
    99+
    2023-05-31
    android roi
  • JavaScript/jQuery实现切换页面效果
    本文实例为大家分享了JavaScript/jQuery实现切换页面效果的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="...
    99+
    2024-04-02
  • 小程序tab实现页面切换
    本文实例为大家分享了小程序tab实现页面切换的具体代码,供大家参考,具体内容如下 .wxml <view class='title'>       <view c...
    99+
    2024-04-02
  • Android如何使用ViewPager2实现页面滑动切换效果
    目录1.引言2.实现页面滑动切换2.1 引入ViewPager2库2.2 使用ViewPager22.3 构建Fragment2.4 继承FragmentStateAdapter2....
    99+
    2024-04-02
  • vue如何实现点击切换页面
    本篇内容介绍了“vue如何实现点击切换页面”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue实现点击切换页面的方法:1、注册一个组件,并在...
    99+
    2023-07-04
  • velocity.js实现页面滚动切换效果
    今天介绍一个Javascript的小型的动画插件velocity.js,可以方便高效的开发一个具有多页面滚动切换效果的网站。 浏览器支持 velocity.js支持IE8+、Chro...
    99+
    2024-04-02
  • AndroidViewPager实现页面左右切换效果
    本文实例为大家分享了Android ViewPager实现页面左右切换的具体代码,供大家参考,具体内容如下 主界面viewpager.xml: <xml version="1....
    99+
    2024-04-02
  • pushState实现Ajax无刷新页面切换
    可以通过使用pushState方法来实现Ajax无刷新页面切换。pushState方法可以向浏览器的历史记录中添加一个新的状态,并且...
    99+
    2023-08-15
    pushState
  • html实现tab页面切换的方法
    小编给大家分享一下html实现tab页面切换的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!html实现tab页面切换的方法:首先创建一个类名为wrap的div当作容器;然后创建四个label标签,在每一个label中...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作