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的测量模式
接下来在布局文件中像使用组件一样使用该类即可,注意:引入自定义组件要包含完整路径名。

posted @   maplerain  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
21:00:18
2025年03月16日
本博客主要为个人学习使用,博主目前为某专科学校大二学生,能力尚有所欠缺,若发现文章中存在错误,请在评论区向博主反映,博主会第一时间进行更改或补充,感谢!
点击右上角即可分享
微信分享提示