Tab + Swipe+ RecyclerView + Collapsed
随着Android的不断更新,老旧的布局页面已经过时,这就使得复杂的布局实现起来有些难度,在此记录一下手机中最常见的复杂界面实现方法。
最终效果
本文主要通过分析最新版AS下new project的Srolling Activity和Tabbed Activity布局方式,并查阅网上资料得以实现。其最终的样子类似于
Fig1
布局逻辑
AS自带的布局树,展示不全,没有显示CollapsingToolbarLayout部分
Component Tree
自行手动分析:
Fig3.png
其中的ViewPager里面装有recyclerView
坑点
下拉联动
本文中的组合布局最难搞的就是多个可滚动的组件联动问题,下拉时可能触发折叠栏、RecyclerView和下拉刷新。这三项的顺序通过以下步骤控制
app:layout_scrollFlags属性规定了折叠过程中的行为,本文将其设置为"scroll|snap">,意思是启用滚动和实现吸附。此外该属性常用的标签还有
scroll :
下面几项存在的必要条件
enterAlways :
决定向下滚动时Scrolling View和Child View之间的滚动优先级问题。如最终效果,Fig1绿色部分先滚动,recyclerview(Fig1白色部分)再滚动
enterAlwaysCollapsed
与enterAlways一起使用,不同点为recyclerview(Fig1白色部分)滚动到底,Child View(Fig1绿色标题部分)完全隐藏
exitUntilCollapsed
滚动到底,ChildView(Fig1绿色标题部分)不会完全隐藏
SwipeRefreshLayout的放置位置问题
SwipeRefreshLayout的位置特别关键,因嵌套层次较多,开始时没有设对位置,导致联动出现了问题。经过上网查阅资料发现,很多人也有同样的问题,然而网上方法很多都是通过在Fragment文件中,判断RecyclerView的位置,决定何时调用下拉刷新。这样做显然是违背了设计者一开始的意思。
经过多次尝试,找到SwipeRefreshLayout应囊括在recyclerView之外。代码如下所示,该部分为Fig3的ViewPager里面的内容
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout_inActivity"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recylerview_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
注意点
该tab布局,官方提供了FragmentPagerAdapter 和 FragmentStatePagerAdapter两种适配器进行管理。这两种的主要区别为
Fragment的生命周期
FragmentPagerAdapter 中Fragment 实例常驻内存,当其不可见时,仅仅销毁视图结构,其中的内容仍在内存之中。也就是调用到了OndestroyView()
FragmentStatePagerAdapter 不仅视图层次销毁,实例也被销毁。即Fragment在生命周期中走到了Ondestroy()
所以,在数据量较小的应用场景中适合用FragmentPagerAdapter进行管理,而当涉及大量图片视频缓存时最好采用FragmentPagerAdapter
Tab + Swipe+ RecyclerView + Collapsed的更多相关文章
- 我这样减少了26.5M Java内存!
WeTest 导读 历时五天的内存优化已经结束,这里总结一下这几天都做了什么,有哪些收获.优化了,或可以优化的地方都有哪些.(因为很多事还没做,有些结论需要一定样本量才能断定,所以叫一期)一期优化减少 ...
- Microsoft Onenote shortcuts / Onenote快捷键大全
Onenote跟Libreoffice ,有道笔记比起来一个快捷键特别不太好用,就是Ctrl + Shift +v 并不会提供一个选择粘贴模式选项. 而在Onenote 中 Ctrl + Shift ...
- zepto.js swipe实现触屏tab菜单
今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...
- 简单封装的web里面的tab点击和swipe滑动的小插件
简单封装的一个web的手势,tab和swipe,里面的具体数值都是自定义上去的,没有实际的标准,可以自行去修改都行 前两个是详解,js插件在最后一部分代码 ``` //封装web的tab步骤详解 &l ...
- CoordinatorLayout 嵌套 AppBarLayout RecyclerView ,通过代码控制,使得CoordinatorLayout 自动滑动到tab置顶的位置
有两个方式可以实现 一:调用AppBarLayout,设置间距 val behavior = (appbar_layout.getLayoutParams() as CoordinatorLayout ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...
- 浅谈RecyclerView(完美替代ListView,GridView)
Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用. 个人体验来说,RecyclerView绝对是一款功能强大的控件. 首先总结下Recycl ...
- RecyclerView和PullToRefreshListView的对比
项目中上拉刷新和下拉加载一直都是比较常见的:以前一般都是重写ListView或直接用PullToRefreshListView的框架:最近尝试用RecyclerView来实现下拉加载上拉刷新也是不错的 ...
随机推荐
- 匿名内部类和Lambda表达式是一样的吗?
先看一下匿名内部类长什么样子: 1 package com.jvm.demo.test2; 2 3 public class InnerClassTest { 4 5 public static vo ...
- RHSA-2017:2029-中危: openssh 安全和BUG修复更新(存在EXP、代码执行、本地提权)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- php数据显示在html截取字符
<?php echo mb_subsrt($s['content'],0,20,'gbkj')?> gbk也可以是utf8根据实际情况来
- id+is+深浅co'p'y
day06 一.id.is 关键字:id #唯一的,如果id相同,说明2个变量指向同一个地址,就是变量一==变量二 注意:id相同值一定相同,值相同但是id不一定相同(不同代码块的值相同,他们就像太阳 ...
- linux启动过程中建立临时页表
intel的x86这种架构为了兼容以前同系列的架构有一些很繁琐无用的东西.比如分段和分页两种机制都可以实现隔离进程的内存空间,在x86上两种机制都有,用起来比较繁琐.所以linux内核在启动的时候通过 ...
- ip地址和网络端口总结
ip地址 ip地址默认指ipv4地址,用4个字节表示,转换为点分10进制,可以表达范围0.0.0.0到255.255.255.255的地址,大约为42.95亿个地址.互联网编号分配机构(IANA,In ...
- python文件管道 下载图集
# -*- coding: utf-8 -*- import re from time import sleep import scrapy from scrapy.linkextractors im ...
- tomcat在eclipse里部署
先下载安装包,解压缩,运行安装文件(端口:8080,下一步 指定jdk安装路径,记住tomcat的安装位置) 安装程序的位置 和 安装后的位置不一样 ...
- Ⅳ Monte Carlo Methods
Dictum: Nutrition books in the world. There is no book in life, there is no sunlight; wisdom withou ...
- Maven2 ---- 安装及配置
Maven详解(二)------ Maven的安装配置 目录 1.下载 Maven 2.配置 Maven 环境变量 3.查看 Maven 环境变量是否配置成功 4.在 eclipse 中集成 Ma ...