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

相关文章
相关标签/搜索