Android ScrollView与ListView冲突的解决办法
问题:
ScrollView嵌套ListView,出现ListView内容无法滑动的问题。
原因:
ListView滚动条无法获取焦点。
解决方法:
ListView出现滚动是因为内容大于其所要展现的高度,归根其原因就是内容太长,溢出屏幕之外,无法查看,所以要滚动内容来辅助查看。
ScrollView本身就是为了解决内容溢出的问题而存在的,那么ListView就无需滚动,只要计量好ListView高度,展现在ScrollView当中即可。
如何让ListView的高度等于内容高度?只需要改变其测量模式即可。
首先新建一个 MyListView 的类继承 ListView 重写onMeasure()方法:
public class MyListView extends ListView{ // 构造方法 public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override // 重写父类onMeasure方法,改变模式 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 调用MeasureSpec类的makeMeasureSpec方法传入测量值和测量模式,heightMeasureSpec的前两位是模式,后面的才是高度 heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST); // 调用父类传入测量值 super.onMeasure(widthMeasureSpec,heightMeasureSpec); } }
上述代码其实只是为了改变ListView的测量模式
接下来在布局文件中像使用组件一样使用该类即可,注意:引入自定义组件要包含完整路径名。
本文来自博客园,作者:maplerain,转载请注明原文链接:https://www.cnblogs.com/maplerain/p/16255340.html 博主B站
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现