随着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的更多相关文章

  1. 我这样减少了26.5M Java内存!

    WeTest 导读 历时五天的内存优化已经结束,这里总结一下这几天都做了什么,有哪些收获.优化了,或可以优化的地方都有哪些.(因为很多事还没做,有些结论需要一定样本量才能断定,所以叫一期)一期优化减少 ...

  2. Microsoft Onenote shortcuts / Onenote快捷键大全

    Onenote跟Libreoffice ,有道笔记比起来一个快捷键特别不太好用,就是Ctrl + Shift +v 并不会提供一个选择粘贴模式选项. 而在Onenote 中 Ctrl + Shift ...

  3. zepto.js swipe实现触屏tab菜单

    今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...

  4. 简单封装的web里面的tab点击和swipe滑动的小插件

    简单封装的一个web的手势,tab和swipe,里面的具体数值都是自定义上去的,没有实际的标准,可以自行去修改都行 前两个是详解,js插件在最后一部分代码 ``` //封装web的tab步骤详解 &l ...

  5. CoordinatorLayout 嵌套 AppBarLayout RecyclerView ,通过代码控制,使得CoordinatorLayout 自动滑动到tab置顶的位置

    有两个方式可以实现 一:调用AppBarLayout,设置间距 val behavior = (appbar_layout.getLayoutParams() as CoordinatorLayout ...

  6. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  7. Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理

    RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...

  8. 浅谈RecyclerView(完美替代ListView,GridView)

    Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用. 个人体验来说,RecyclerView绝对是一款功能强大的控件. 首先总结下Recycl ...

  9. RecyclerView和PullToRefreshListView的对比

    项目中上拉刷新和下拉加载一直都是比较常见的:以前一般都是重写ListView或直接用PullToRefreshListView的框架:最近尝试用RecyclerView来实现下拉加载上拉刷新也是不错的 ...

随机推荐

  1. Linux 下 svn 场景实例及常用命令详解

    一.SVN使用场景实例 问题: 在使用svn做为版本控制系统的软件开发中,经常会有这样的需求:在工作复本目录树的不同目录中增加了很多文件,但未纳入版本控制系统,这时如果使用svn add命令一个一个的 ...

  2. PHP 下载七牛云的sdk

    1,语法 composer require qiniu/php-sdk 2,出现以下图片内容就是下载七牛云的sdk成功

  3. 我要告诉你:java接口中可以定义private私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  4. 2017-18一《电子商务概论》专科作业--经管B1601/2、经管B1631

    第1次作业: 1.你如何来定义和理解电子商务?电子商务对社会经济带了怎样的影响,企业.消费者的反应如何?你知道哪些电子商务企业,他们都属于什么类型? 2.请详细阐述应该如何关注哪些事项才能在淘宝网成功 ...

  5. 彻底根治window弹窗小广告(今日热点)

    在一个阴雨蒙蒙的下午,我上完厕所回到工位,输入锁屏密码,解锁,蹦出来三个小广告,我......这还能忍??? 废话不多说,开搞! 一.广告分为两种: 红色字的今日热点 蓝色字的今日热点 二.追溯根源: ...

  6. .net core中的那些常用的日志框架(Serilog篇)

    前言 上文说到Nlog日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mon ...

  7. LR Optimization-Based Estimator Design for Vision-Aided Inertial Navigation

    Abstract 我们设计了一个 hybrid 估计器, 组合了两种算法, sliding-window EKF 和 EKF-SLAM. 我们的结果表示, hybrid算法比单一的好. 1. Intr ...

  8. 【最大匹配+二分答案】POJ 3057 Evacuation

    题目大意 POJ链接 有一个\(X×Y\)的房间,X代表墙壁,D是门,.代表人.这个房间着火了,人要跑出去,但是每一个时间点只有一个人可以从门出去. 问最后一个人逃出去的最短时间,如果不能逃出去,输出 ...

  9. spring boot:用dynamic-datasource-spring-boot-starter配置多数据源访问seata(seata 1.3.0 / spring boot 2.3.3)

    一,dynamic-datasource-spring-boot-starter的优势? 1,dynamic-datasource-spring-boot-starter 是一个基于springboo ...

  10. 《NASA对N+3代先进飞行器概念设计最终报告》阅读笔记

    民用航空的爆炸式增长已是未来的必然,灿烂的前景也意味着巨大的挑战,谁能发掘到未来技术的潜力,谁就能称霸下一个30年的天空! 文章目录 总概述 单双争霸 四点发现 方案分析 多维度分析 设计要求 品质因 ...