Android NestedScrollView+TabLayout+ViewPager+ 其它布局,ViewPager 不显示以及超出屏幕不显示问题
前言
此场景为 NestedScrollView 嵌套多个布局 ,大致结构为 NestedScrollView+TabLayout+ViewPager+fragment +其它View,如下图 ,

一、ViewPager 设置高度才会显示内容问题
原因:NestedScrollView 计算高度先于 ViewPager 渲染前,所以 ViewPager 的高度才会一直是0,所以设定高度才会显示,但这不符合实际开发需求,实际开发需要根据子布局的高度填充内容,一般 ViewPager 的高度为 wrap_content,所以此时设置 NestedScrollView 的fillViewport 属性 android:fillViewport="true"
<android.support.v4.widget.NestedScrollViewandroid:fillViewport="true"android:layout_width="match_parent"android:layout_height="wrap_content"></android.support.v4.widget.NestedScrollView>
二、其它View 超出屏幕不显示问题
但是设置 android:fillViewport="true" 后发现 其它View 不显示了 ,这是因为该属性它用于在ScrollView中填充视图的高度,以便在内容不足以填满屏幕时也能填充整个屏幕。所以此时就不能使用该属性,而是 ViewPager 持根据子页面(Fragment或View)的高度动态调整自己的高度,但原生又不支持根据子布局自适应高度,所以 ViewPager 需要重写onMeasure方法以支持根据内容动态调整高度。
public class DynamicHeightViewPager extends ViewPager {public DynamicHeightViewPager(Context context) {super(context);}public DynamicHeightViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int height = 0;for (int i = 0; i < getChildCount(); i++) {View child = getChildAt(i);child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) Math.max(height, child.getMeasuredHeight()), MeasureSpec.UNSPECIFIED));height = Math.max(height, child.getMeasuredHeight());}super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));}
}
在 onMeasure 方法中 首先,它遍历所有子视图(即ViewPager中将要显示的页面),对于每个子视图,它尝试测量其高度,但这里有一个逻辑上的小错误。在第一次调用child.measure时,child.getMeasuredHeight()很可能为0,因为子视图还没有被真正测量过。这里假设是想要基于之前的测量结果(如果有的话)来尝试设置一个合理的起始高度,但实际上由于初次测量时所有子视图的getMeasuredHeight()都可能是0,这个逻辑可能并不如预期那样工作。一个更稳妥的做法是直接给子视图一个较大的初始高度或完全不受限制的高度(如MeasureSpec.UNSPECIFIED),然后根据实际需要调整。然后,它更新height变量为当前找到的最大子视图高度。最后,它使用找到的最大高度作为ViewPager的高度,并调用super.onMeasure来设置最终的测量规格,
在布局中直接替换 ViewPager 即可,
总结
如果对你有所帮助的话,不妨 点赞收藏
如果你有什么疑问的话,不妨 评论私信
青山不改,绿水长流 ,有缘江湖再见 ~
相关文章:
Android NestedScrollView+TabLayout+ViewPager+ 其它布局,ViewPager 不显示以及超出屏幕不显示问题
前言 此场景为 NestedScrollView 嵌套多个布局 ,大致结构为 NestedScrollViewTabLayoutViewPagerfragment 其它View,如下图 , 一、ViewPager 设置高度才会显示内容问题 原因:NestedScrollView 计算高度先于 ViewPager 渲染前,所…...
Linux开机logo设置
本文介绍Linux开机logo设置。 常用的Linux开机logo设置工具有fbi(Linux Framebuffer Imageviewer),plymouth等,本文针对fbi工具进行开机logo设置。 1.fbi工具安装 命令行下,输入: sudo apt-get install fbi -y 安装完毕后&am…...
webpack插件开发 模拟vue系统登录后,获取a标签下的文件
浏览器插件开发中,在webpack插件开发中,模拟Vue系统登录后获取a标签下的文件,可以通过监听某个登录事件,并在事件处理函数中修改Webpack的输出配置来实现。以下是一个简化的示例代码: // 假设有一个插件构造函数 Logi…...
大规模数据处理:分库分表与数据迁移最佳实践
什么是分库分表 分库分表是一种数据库架构优化策略,它将数据分散存储在多个数据库或表中,以此来提高系统的可扩展性和性能。 虽然分库分表能够提升系统的整体性能,但是也不要一上来就分库分表,如果系统在单表的情况下࿰…...
TCP网络编程概述、相关函数、及实现超详解
文章目录 TCP网络编程概述1. TCP协议的特点2. TCP与UDP的差异3. TCP编程流程 TCP网络编程相关函数详解1. socket():创建套接字参数说明:返回值:示例: 2. connect():客户端连接服务器参数说明:返回值&#x…...
Cluade 3.5 Sonnet 提示词泄露
prompt 翻译: The notebook currently demonstrates support for a two agent setup. Support for GroupChat is currently in development....
git clone代码报错Permission denied (publickey)
git clone gerrit SSH的Clone with commit-msg hook代码连接,报错Permission denied (publickey). 一般在C:\Users\用户名.ssh文件夹下有一个id_rsa.pub文件 把文件里的内容复制 到gerrit网站上User Settings的SSH keys里 在New SSH key里粘贴刚刚复制的内容&…...
QT设计中文输入法软键盘DLL给到C#开发步骤
开发目的:本文提供解决触摸屏C#程序中无法输入中文问题,中文拼音采用开源的谷歌输入法程序、使用QT编译中文输入法界面和中文输入法接口给到C#使用。 开发步骤: 1、QT中设计字母和字符输入界面 2、QT中设计数字输入界面 3、QT中封装调用谷歌…...
使用 Rust 和 wasm-pack 开发 WebAssembly 应用
一、什么是 WebAssembly? WebAssembly 是一种运行在现代 Web 浏览器中的新型二进制指令格式。它是一种低级别的字节码,可以被多种语言编译,并在浏览器中高效运行。 1.1 WebAssembly 的背景与概念 高性能计算:WebAssembly 旨在提…...
1. IP地址介绍
IP地址 一、网络概述1、网络类型2、网络组成、传输介质2.1 组成2.2 传输介质 二、IP地址1、IP地址的表示方法2、IP地址的组成3、IP地址的类型3.1 根据IP地址第一个字节大小来分3.1.1 单播地址 Unicast 3.2 根据IP地址的使用 三、子网掩码 netmask1、默认的子网掩码2、判断多个I…...
喜报来袭~又有一波优秀企业选择Smartbi
近期,大金(中国)武汉&广州分公司、中广核智能、新疆银行、四川省人民医院等多家知名企业/机构签约Smartbi,数智化建设再上新高度! Smartbi数10年专注于商业智能BI与大数据分析软件与服务,为各行各业提…...
Web端云剪辑解决方案,BS架构私有化部署,安全可控
传统视频制作流程繁琐、耗时,且对专业设备和软件的高度依赖,常常让企业望而却步,美摄科技凭借其强大的技术实力和创新能力,推出了面向企业用户的Web端云剪辑解决方案,为企业提供一站式、高效、便捷的视频生产平台。 B…...
AI 代码助手插件推荐
AI正在重塑我们的工作方式,软件开发也不例外。AI编码助手使开发人员能够比以往更快、更有效地编写代码。 在本文中,我们将比较几个个最好的AI编码助手,突出它们的独特功能和价格,以帮助读者找到完美的编码伙伴: 1、腾讯云 AI 代…...
word中的表格全部设置宽度100%
1、背景 我们用工具将数据库或其他的数据导出成word时,表格有的会大于100%,超过了边界。word没有提供全局修改的方法。如果我们想改成100%。 一种方式是通过宏,全局改。一种是手动改。 2、宏修改 如果表格多,可以通过这种方式。…...
JFinal整合Websocket
学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦!导入JAR包 javax.websocket-api <dependency><groupId>javax.websocket</groupId><artifactId>javax.websocket-api</artifactId><version>1.1&…...
(done) 声音信号处理基础知识(7) (Understanding Time Domain Audio Features)
参考:https://www.youtube.com/watch?vSRrQ_v-OOSg&t1s 时域特征包括: 1.幅度包络 2.均方根能量 3.过零率 振幅包络的定义:一个 frame 里,所有采样点中最大的振幅值 一个形象的关于振幅包络的可视化解释如下:…...
拓数派荣获上海数据交易所“数据治理服务商”认证
近期,杭州拓数派科技发展有限公司(以下简称“拓数派”)荣获上海数据交易所“数据治理服务商”认证,标志着拓数派正式加入上海数据交易所数商生态,成为上海数据交易所官方认证的数据治理服务商。拓数派企业发展部总监吴…...
【Redis】分布式锁之 Redission
一、基于setnx实现的分布式锁问题 重入问题:获得锁的线程应能再次进入相同锁的代码块,可重入锁能防止死锁。例如在HashTable中,方法用synchronized修饰,若在一个方法内调用另一个方法,不可重入会导致死锁。而synchroni…...
对象序列化
Data AllArgsConstructor NoArgsConstructor public class Product implements Serializable {public Long productId;public String productName;public Double productPrice;public String productImg;public Integer productStatus;public String productCategory; }为什么要…...
什么是专利开放许可?
专利作为技术创新的重要载体,其有效转化与应用成为推动社会进步和经济发展的关键力量。那么,专利开放许可究竟是何方神圣?它如何打破传统专利许可的壁垒,促进创新资源的广泛共享? 专利开放许可的定义 专利开放许可&am…...
对比直接使用厂商 API 体验 Taotoken 在模型切换上的便利性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商 API 体验 Taotoken 在模型切换上的便利性 在个人开发项目中接入大模型时,开发者通常面临一个选择&am…...
【技术解析】基于主成分分析与神经网络的航空安全风险建模:从QAR数据预处理到实时预警仿真
1. 航空安全风险建模的技术背景 每次坐飞机时,你可能都好奇过:机长是如何确保飞行安全的?其实背后有一整套数据驱动的安全体系在支撑。QAR(快速存取记录器)就像飞机的"黑匣子",记录了上百项飞行参…...
3大突破性功能:如何用QtScrcpy彻底改变你的Android投屏体验
3大突破性功能:如何用QtScrcpy彻底改变你的Android投屏体验 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 你是否曾经为了在电脑上操作手机而烦恼?无论是游…...
3步实现专业级AI换脸:roop-unleashed创新方案指南
3步实现专业级AI换脸:roop-unleashed创新方案指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在数字创意飞速发展的今天,AI换脸…...
告别ET1100?聊聊AX58100这颗高性价比EtherCAT从站芯片的升级体验
告别ET1100?AX58100高性价比EtherCAT从站芯片的工业升级实战 当工业设备制造商面临从传统控制架构向实时以太网迁移时,EtherCAT从站芯片的选型往往成为关键转折点。十年前,ET1100凭借其稳定的性能和相对友好的开发门槛,成为许多工…...
3分钟完成30分钟任务:词达人自动化助手终极指南
3分钟完成30分钟任务:词达人自动化助手终极指南 【免费下载链接】cdr 微信词达人,高正确率,高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 你是否厌倦了每周在词达人平台上花费数小时完成枯燥的…...
利用OCI免费套餐构建高可用Kubernetes集群实战指南
1. 项目概述:在免费云上构建企业级K8s集群最近在技术社区里,一个名为“nce/oci-free-cloud-k8s”的项目引起了我的注意。这个标题乍一看有点“黑话”的味道,但拆解开来,它指向了一个非常具体且极具吸引力的场景:利用Or…...
基于AutoHotkey的Windows桌面自动化工具开发实战
1. 项目概述与核心价值最近在整理个人项目库时,翻到了一个挺有意思的“老伙计”——cua_desktop_operator_skill。这个项目名听起来有点拗口,直译过来是“CUA桌面操作员技能”。乍一看,可能会让人联想到某种工业控制台的专用软件。但实际上&a…...
DownKyi技术架构解析:构建高性能B站视频下载引擎的工程实践
DownKyi技术架构解析:构建高性能B站视频下载引擎的工程实践 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
OpenClawTuto:从零构建高可靠GUI自动化脚本的工程实践指南
1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫“OpenClawTuto”。光看名字,你可能会有点懵,这“OpenClaw”是啥?是开源爪子?还是某种工具?其实,这是一个围绕“OpenClaw”这个…...
