ScrollView和ListView嵌套

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);

發佈了29 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章