手把手实现tablayout随recycleview滚动而滚动(非官方coordinatorlayout实现)

本文介绍了一种非官方CoordinatorLayout实现方式,通过监听RecyclerView的滚动事件,手动控制TabLayout滚动,解决了在使用官方库时遇到的问题,如布局加载、滚动回弹等。详细介绍了布局设计、关键代码实现以及事件交互过程,最后提供了Demo下载链接。

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

谷歌新出的Android Design Support Library带来了新的兼容的md风格控件,其中的coordinatorlayout配合appbarlayout再指定behavior可以实现滚动的效果,然而很遗憾,在应用到项目的时候,出现各种问题,比如:

1.我所在的coordinatorlayout布局里需要用到viewstub作为网络请求异常时懒加载的布局,在coordinatorlayout如果延时20多ms再去viewstub.inflate的话布局就找不到了,在relativelayout这些布局就是可以随时调用加载显示。

2.首先向上滚动recycleview,直到tablayout跟随滚动被隐藏,切换到其他fragment再切换回coordinatorlayout所在的fragment,向下滚动recycleview回到位置0的话,tablayout不会滚回来了,需要稍微先上滑动一下再向下话才能回来,估计是tablayout设置的属性app:layout_scrollFlags=”scroll|enterAlways”问题。

3.向上滚动recycleview到一定位置,点击回到顶部的按钮,调用scrollToPosition(0)回到位置0的话,tablayout也是不会滚回来的,也是需要稍微先上滑动一下再向下话才能回来。

所以思考调试了很久还是决定自己动手,丰衣足食,不要coordinatorlayout,再tablayout的包裹布局,通过监听recycleview的onscroll事件,取每次偏移量,调用tablayout的包裹布局的scrollby(0,dy)来实现移动,并针对快速滑动时偏移量的突增进行了判断和处理,最终实现了较好的tablayout随recycleview滚动而滚动效果,这样用户滑动recycleview时能够看到更多的内容,体验又提升了。

首先看下mainactivity的布局:
viewpager和tablayout放在帧布局里面,这样做是为了,recycleview位置0的地方添加一个跟tablayout等高的view,从而tablayout不会遮住recycleview的图片item

<?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"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/material_primary"
        app:popupTheme="@style/Theme.AppCompat.Light">
    </android.support.v7.widget.Toolbar>

    <FrameLayout
        android:layout_below="@id/toolbar"
        android:layout_width="match_parent"
        android:layout_height
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值