ScrollView 与 ListView 以及 GridView 滑动冲突完美解决

简介: 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



相关文章
|
Java API Android开发
ListView简单实用
自定义BaseAdapter,绑定ListView的最简单例子
132 0
C#-ListView的使用
ListView顾名思义用来做列表数据展示,也是我们在开发中经常使用的控件之一,接下来将展示下它的一些使用场景,以满足不同的需求。
121 0
|
C#
C#-ListView
C# ListView
85 0
Flutte 之 ListView
Flutte 之 ListView
61 0
Flutte 之 ListView
|
XML Android开发 数据格式
ListView
在这里给大家分享Android的ListView控件的一些经验,能力有限,还望大家多多指教,不喜勿喷哦,kensoon918@163.com only for feedback
1522 0
|
Android开发 数据格式 XML
浅谈RecyclerView(完美替代ListView,GridView)
Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用。 个人体验来说,RecyclerView绝对是一款功能强大的控件。 首先总结下RecyclerView的特点: 1.
1241 0
ListView在ScrollView中不显示全部的问题
  在实际应用中,我们可能会遇到把ListView放到ScrollView中的情况,在这种情况下,ListView的滑动属性与ScrollView的滑动出现冲突,从而ListView只显示一项。这里提供一种解决方案,就是设置ListView中每个Item的高度显示之,使他失去滑动的属性,从而适应ScrollView的滑动。
905 0
|
Android开发 数据格式 XML
ScrollView下的ListView问题解决
问题描述:在一个复合布局当中,有TextView、ListView、Button等,除了button之外,其余高度不定,是动态变化的,很容易超过一个屏幕的高度,这个时候我们需要给总布局添加一个ScrollView,但因为ListView集成与ScrollView,所以会导致listview的Scroll效果失效; 解决方法:找了很多方法,大体思路是动态设计ListView的Item高度,
1023 0
解决ListView嵌套ListView遇到的问题
Listview嵌套会造成的问题主要是子listview的高度错误导致内容不能正常显示完,解决这个问题,我个人第一个想法就是重新计算子listview的高度,代码如下: private void setListViewHeightBasedOnChildren(ListView listView) { if(listView == null) return; Li
1199 0
|
Android开发
ScrollView与ListView的事件冲突
布局文件 当ListView嵌套在ScrollView中时,会发生冲突,导致ListView控件的拉动效果消失‘ 解决办法: 重写ListView的onTouchEvent(),并在返回前调用getParent().requestDisallowInterceptTouchEvent(true)  表示。
800 0