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实现ECC算法
ECC(Elliptic Curve Cryptography)是一种非对称加密算法,基于椭圆曲线数学。与传统的RSA和DSA等算法相比,ECC在相同的安全性下使用更短的密钥长度,提供了更高的加密效率和性能。
1232 0
|
SQL 网络协议 关系型数据库
Golang如何优雅连接MYSQL数据库?(上)
Golang如何优雅连接MYSQL数据库?
678 0
Golang如何优雅连接MYSQL数据库?(上)
|
Android开发 UED 开发者
Android经典实战之WindowManager和创建系统悬浮窗
本文详细介绍了Android系统服务`WindowManager`,包括其主要功能和工作原理,并提供了创建系统悬浮窗的完整步骤。通过示例代码,展示了如何添加权限、请求权限、实现悬浮窗口及最佳实践,帮助开发者轻松掌握悬浮窗开发技巧。
2195 1
|
存储 Java 数据库
基于全志H713 Android 11:给TvSettings添加default.xml默认值
本文介绍了在全志H713 Android 11平台上为TvSettings应用添加HDMI CEC功能的默认设置值的方法,通过修改SettingsProvider的源码和配置文件来实现默认值的设置,并提供了详细的步骤和测试结果。
588 0
基于全志H713 Android 11:给TvSettings添加default.xml默认值
|
安全 数据挖掘 网络安全
电子商务网站建设的关键技术
移动端适配是电子商务网站建设中越来越重要的关键技术。综上所述,电子商务网站建设涉及多个关键技术,包括网站设计与用户体验、安全性、性能与可扩展性、搜索引擎优化、移动端适配以及数据分析与营销。掌握这些关键技术,企业可以建设一个安全、高效、用户…
782 0
windows11物理机和VM中windows10虚拟机共享文件解决办法问题
windows11物理机和VM中windows10虚拟机共享文件解决办法问题
|
Android开发
Permission Denial: not allowed to send broadcast in android
Permission Denial: not allowed to send broadcast in android
731 0
解决ListView显示不全、滑动冲突问题
解决ListView显示不全、滑动冲突问题
|
Android开发
Android stdio 无法新建或打开AIDL文件(解决方法)
Android stdio 无法新建或打开AIDL文件(解决方法)
1350 0