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站