ListView默認不消費,也就是ScrollView攔截了listView的觸摸事件,所以要想使得ListView可以滑動,需要自定義ScrollView,並且實現觸摸攔截方法onInterceptTouchEvent(MotionEvent ev),並且返回值爲false,也就是不攔截。
下面例舉集中情況:
第一種情況:
ScrollView可以滑動,listView只顯示一行並且不能滑動;
第二種情況:
ScrollView可以滑動,listView顯示多行但是仍然不能滑動;
第三種情況:
MyScrollView自定義ScrollView,並且實現方法:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false; //返回值false,表示不攔截,所以ListView可以滑動
}
自定義MyScrollView
ScrollView可以滑動,listView顯示一行但是可以滑動,不帶動ScrollView滑動;
第四種情況:自定義MyScrollView
ScrollView可以滑動,listView顯示多行,但不能全部顯示,但是可以滑動,不能帶動ScrollView滑動;
第五種情況:自定義ScrollView,自定義ListView
ScrollView可以滑動,listView上所有的item都可以顯示,listView這個部分不可以滑動(ScrollView上其他組件直到ListView之前都可以滑動),如果滑到底部,且屏幕上只顯示ListView的部分,將不能再滑動。
第六種情況:自定義ListView
ScrollView可以滑動,listView顯示所有的item,並且可以滑動,帶動ScrollView滑動。
自定義ListView,重寫onMeasure()方法:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE / 2,
MeasureSpec.AT_MOST);