android横向滑动选项卡,ViewPager+Fragment实现水平滑动选项卡【Android】

本文介绍了如何使用ViewPager+Fragment在Android中创建横向滑动选项卡,包括需求分析、代码实现和布局设计。重点讲解了如何通过FragmentPagerAdapter作为适配器,以及如何处理指示器的移动和Fragment间的传值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每一次量体重。轻了就对自己说:瘦了。重了就对自己说:胸部大了。

72dcd259f21c473107b06fc51f310f92.png

选项卡大家并不陌生,即实现多视图选项切换。因为选项卡能够减少同一个页面多视图操作的臃肿,所以选项卡在APP中应用十分广泛,其中ViewPager能够很好地适应Fragment,因此ViewPager+Fragment也是很多开发者常用地一种实现水平滑动选项卡方式。

本小节将教会大家如何使用ViewPager+Fragment实现水平滑动选项卡,在讲解之前首先看一下最终效果图:

83d922b00ccc5d5cb30b4ba5ebe67b3d.gif

一、明需求

需求一:ViewPager包裹三个界面,分别是通知、发现和联系人。而这三个界面是由三个Fragment进行呈现和管理,并且Fragment要能够接收到Activity或Fragment的传值。

需求二:要能实现指示器,当ViewPager进行切换的时候,指示器能够随着ViewPager一起移动。当手指水平滑动ViewPager的时候,指示器也要能够跟随着手指的方向移动。

需求三:本案例中,是采用Fragment嵌套Fragment来实现选项卡功能。所以ViewPager是依附于主Fragment。

二、分析

分析一:ViewPager继承ViewGroup,所以ViewPager是由一组View组成。从某种意思上讲,Fragment并不能当做一个View传递给ViewPager。那么该如何使用ViewPager包裹Fragment呢?在Android API v4扩充包下提供了android.support.v4.app.FragmentPagerAdapter类,该类继承PagerAdapter,正好可以当做ViewPager的适配器使用,而此时的Fragment可以理解成View。这也是为什么我前面提到ViewPager能够很好地适应Fragment的原因。

分析二:对于主Activity或主Fragment如何传值给Fragment这一问题,其实有很多方式来实现。如果想在初始化Fragment的时候就进行传值,可以使用newInstance方法实现初始化和传值。如果想在初始化Fragment之后传值,可以在相应的Fragment内定义一个对外的方法实现传值。

分析三:指示器该如何配合ViewPager的切换而改变相应位置?首先要监听ViewPager切换动作,即实现ViewPager.OnPageChangeListener接口,在该接口中有一个onPageScrolled方法,ViewPager滚动的时候会触发该方法。监听ViewPager动作只是实现了第一步,第二步是改变指示器的位置,指示器可以使用ImageView来实现,通过动态的设置Margin来实现位置的变化。

分析四:Fragment嵌套Fragment,只需要使用android.support.v4.app.Fragment就能实现,具体实现方式,可以观看【Android】android.support.v4.app.Fragment实现选项卡功能这篇文章。

三、代码实现

首先是布局,整体布局由选项栏,指示器ImageView以及ViewPager组成,代码如下:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#FFF"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="46dp"

android:baselineAligned="false"

android:orientation="horizontal">

android:id="@+id/layout_notice"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值