当前位置: 首页 > news >正文

(原创)可支持最大高度的NestedScrollView

前言

最近写一个dialog,里面有一个ScrollView需要设置最大的高度
但是发现ScrollView是不支持最大高度的
于是自己动手写一个出来

代码

代码很简单,直接贴出来

class MaxHeightNestedScrollView : NestedScrollView {private var maxHeightPercent = 0.5fconstructor(context: Context) : this(context, null)constructor(context: Context, attributeSet: AttributeSet?) : this(context, attributeSet, 0)constructor(context: Context, attributeSet: AttributeSet?, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) {val array = context.obtainStyledAttributes(attributeSet, R.styleable.max_height_scrollview)maxHeightPercent = array.getFloat(R.styleable.max_height_scrollview_maxHeightPercent, 0.5f)}override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {var heightMS = heightMeasureSpectry {val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManagerval display: Display = wm.defaultDisplayval d = DisplayMetrics()display.getMetrics(d)val height = (d.heightPixels * maxHeightPercent).toInt()heightMS = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST)} catch (e: Exception) {e.printStackTrace()}super.onMeasure(widthMeasureSpec, heightMS)}}

在xml使用的地方这样设置最大高度即可:

app:maxHeightPercent="0.6"

其中0.6代表最大高度为屏幕的0.6
其实分析下代码之后,我们也可以很容易的来设置固定的值
这里就不写出来了

注意点

需要注意的第一点是:
这里记得要继承NestedScrollView
一开始我是继承的ScrollView
最后发现如果里面放入的是RecycleView
会出现RecycleView最后一行显示不出来的问题
如果是继承了NestedScrollView就没这个问题了
同样的,以后想要滚动条里面加入RecycleView
最好也是用NestedScrollView

第二点
scrollview嵌套多个RecycleView时,如果要禁止RecycleView的滑动
可以调用RecycleView的setNestedScrollingEnabled(boolean enabled) 方法
传入false即可禁止内部的RecycleView滑动

相关文章:

  • STM32——使用TIM输出比较产生PWM波形控制舵机转角
  • Ubuntu20.04 64位 安装docker(有问题可评论沟通交流)
  • 【PHP】实现类的无缝动态扩展,设计模式,php工厂模式应用场景,以下代码是工厂模式在框架设计中的真实使用案例代码
  • No port is available from the preconfigured port range
  • 华为DCN之:SDN和NFV
  • day09了 加油
  • 基于weixin小程序乡村旅游系统的设计
  • Windows系统安装NVM,实现Node.js多版本管理
  • MATLAB将两个折线图画在一个图里
  • golang项目中gorm框架的配置和具体使用
  • C# 计算椭圆上任意一点坐标
  • 408第二轮复习记录 计算机组成原理(第一章 计算机系统概述)
  • 【高性能服务器】多进程并发模型
  • 【STM32HAL库学习】通信方式:USART、IIC、SPI
  • 如何快速使用JNI
  • 「面试题」如何实现一个圣杯布局?
  • CSS3 变换
  • DOM的那些事
  • Effective Java 笔记(一)
  • es6
  • Intervention/image 图片处理扩展包的安装和使用
  • js算法-归并排序(merge_sort)
  • vue 配置sass、scss全局变量
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 解析带emoji和链接的聊天系统消息
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 免费小说阅读小程序
  • 使用API自动生成工具优化前端工作流
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 怎么把视频里的音乐提取出来
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #define、const、typedef的差别
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (2)MFC+openGL单文档框架glFrame
  • (C)一些题4
  • (poj1.2.1)1970(筛选法模拟)
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)springcloud实战之config配置中心
  • (附源码)ssm码农论坛 毕业设计 231126
  • (黑马C++)L06 重载与继承
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @vue/cli脚手架
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?