ScrollView 與 ListView 以及 GridView 滑動衝突完美解決
我們在用ScrollView巢狀ListView或者GridView的時候會遇到兩個問題,一個問題是ListView高度不正常,另外一個問題是ListView無法滑動。因為這幾個控制元件太常用了。我們來看看應該怎麼解決呢?在解決這個問題之前,我們先來解決一個小問題,就是在我專案中使用了ListView來填充資料之後,ListView直接跳轉到了底部,這裡記錄一下解決方法:
ScrollView 巢狀listview時,當listview自動載入時,會自動滑動到scrollview到底部:
解決方法:在listView的父層加上 android:descendantFocusability=”blocksDescendants”;即可,每次載入都會在scrollview頂部
至於ListView高度的設定,我在前面的一篇博文中已經講過了,這裡就不在重複,沒看過的童鞋這裡給出連結:解決ListView顯示不全、滑動衝突問題
下面我們來看看如果是ListView在ScrollView中時的處理:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* 可滾動的ListView,這裡是因為這個ListView被包裹在一個ScrollView中才需要設定縱向拉伸
*/
public class ScrollListView extends ListView {
public ScrollListView(Context context) {
super(context);
}
public ScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, height);
}
}
下面我們來看看如果是GridView在ScrollView中時的處理:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* 重寫網格View,設定高度
* 可滾動的GridView,這裡是因為這個GridView被包裹在一個ScrollView中才需要設定縱向拉伸
*/
public class ScrollGridView extends GridView {
public ScrollGridView(Context context) {
super(context);
}
public ScrollGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, height);
}
}
ScrollView巢狀ListView時,一般我們有兩種需求:
第一種是ListVIew完全伸展並跟隨ScrollView一起滑動,那隻要按照上面的解決了伸展的問題, 就實現這種效果了,因為ScrollView預設是攔截ListView的滑動事件的。
第二種是ScrollView不攔截滑動事件,當我們在ListView區域滑動時,由ListView處理滑動事件,只有在ListView已到達頂部還繼續向上滑或者ListView已到達底部還繼續向下滑時才重新攔截滑動事件。而當我們在非ListView區域滑動時,則直接由ScrollView處理滑動事件,那麼我們看看怎麼實現這種效果。這個問題點選下面連結檢視。
https://blog.csdn.net/u010261933/article/details/54409361
歡迎start,歡迎評論,歡迎指正