ScrollView 与ListView 滑动冲突完美解决
一、介绍ListView高度的设置方法
二、根据实际需求解决冲突问题
一、介绍ListView高度的设置方法
在ScrollView中使用ListView,ListView的高度会不正常。
方式一:在XML中写死
android:layout_width="match_parent"
android:layout_height="120dp"
方式二:代码中设置固定高度(如果在运行过程中才能决定ListView高度)
public void setHeight(int height){ LayoutParams params = this.listview.getLayoutParams(); params.width = LayoutParams.FILL_PARENT; params.height = height; listview.setLayoutParams(layoutParams); }
方式三:代码中动态设置高度(让ListView高度最大 显示完全所有数据)
public void setHeight(){ int height = 0; int count = adapter.getCount(); for(int i=0;i<count;i++){ View temp = adapter.getView(i,null,listview); temp.measure(0,0); height += temp.getMeasuredHeight(); } LayoutParams params = this.listview.getLayoutParams(); params.width = LayoutParams.FILL_PARENT; params.height = height; listview.setLayoutParams(layoutParams); }
二、根据实际需求解决冲突问题
前提1:ListView 显示全部内容(假如4条数据 我显示满4条)
上述方式三让ListView高度最大,显示完全数据,滑动时就只会响应ScrollView滑动事件
此时ListView不能滑动,也没必要滑动,因为已经显示完全数据。
前提1:ListView 不想显示全部内容(假如100条数据 我只显示10条 滑动查看其余)
使用上述方式一或二,ListView没有显示完全数据
但是想焦点在ListView时滑动ListView,焦点在ScrollView时滑动ScrollView
给ListView加上监听OnTouchListener
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
scrollView.requestDisallowInterceptTouchEvent(true);
return false;
}
}
);