ScrollView 與 ListView 以及 GridView 滑動衝突完美解決

咱們在用ScrollView嵌套ListView或者GridView的時候會遇到兩個問題,一個問題是ListView高度不正常,另一個問題是ListView沒法滑動。由於這幾個控件太經常使用了。咱們來看看應該怎麼解決呢?在解決這個問題以前,咱們先來解決一個小問題,就是在我項目中使用了ListView來填充數據以後,ListView直接跳轉到了底部,這裏記錄一下解決方法:android

ScrollView 嵌套listview時,當listview自動加載時,會自動滑動到scrollview到底部: 
解決方法:在listView的父層加上 android:descendantFocusability=」blocksDescendants」;便可,每次加載都會在scrollview頂部ide

  至於ListView高度的設置,我在前面的一篇博文中已經講過了,這裏就不在重複,沒看過的童鞋這裏給出連接:解決ListView顯示不全、滑動衝突問題.net

  下面咱們來看看若是是ListView在ScrollView中時的處理:blog

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;事件

/**
 * 可滾動的ListView,這裏是由於這個ListView被包裹在一個ScrollView中才須要設置縱向拉伸
 */get

public class ScrollListView extends ListView {
    public ScrollListView(Context context) {
        super(context);
    }it

    public ScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }class

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, height);
    }
}import

下面咱們來看看若是是GridView在ScrollView中時的處理:List

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

轉載自: https://blog.csdn.net/u014727709/article/details/80217537

相關文章
相關標籤/搜索