[Android] Android最简单ScrollView和ListView滚动冲突解决方案

[Question]问题描述:

单独的ListView列表能自动垂直滚动,但当将ListView嵌套在ScrollView后,会和ScrollView的滚动滑块冲突,造成ListView滑块显示不完整。

activity_main.xml表现:

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"****此处省略ScrollView的修饰代码***>

    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">

        <TextView            android:layout_width="match_parent"            android:layout_height="200dp"            android:text="test"/>

        <ListView            android:id="@+id/list_class"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:scrollbars="none"/>    </LinearLayout>

</ScrollView>

[Solution]解决方法:

第一步:自定义ListViewForScrollView类:  ListViewForScrollView.java

package com.jack.helloen.ui;

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

/**
 * 自定义一个类继承自ListView,通过重写其onMeasure方法,达到对ScrollView适配的效果。
 */
public class ListViewForScrollView extends ListView {
    public ListViewForScrollView(Context context) {
        super(context);
    }

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

    public ListViewForScrollView(Context context, AttributeSet attrs,
                                 int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    /**
     * 重写该方法,达到使ListView适应ScrollView的效果
     */
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

第二步: MainActivity.java里增加兼容patch

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

//ListView兼容ScrollView
        sv = (ScrollView) findViewById(R.id.main_scroll);
        sv.smoothScrollTo(0, 0);
}

第三步:布局文件xml 里 引用自定义 组件

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/main_scroll"
*** >

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

<TextView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:text="test"/>

<com.jack.helloen.ui.ListViewForScrollView
            android:id="@+id/list_class"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"/>
    </LinearLayout>
</ScrollView>

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10657559.html

转载请著名出处!谢谢~~

原文地址:https://www.cnblogs.com/wukong1688/p/10657559.html

时间: 2024-10-10 14:01:54

[Android] Android最简单ScrollView和ListView滚动冲突解决方案的相关文章

scrollview嵌套listview滚动冲突解决方案;

主activity页面: package com.example.scrollviewlistview; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; i

ScrollView 嵌套ListView 滑动冲突,与显示不全

import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /** * * @author jiarh *2014-8-14 */ public class UserListView extends ListView { public UserListView(Context context) { super(context); } public UserLis

浅谈android中的ListView合集系列之解决ScrollView和ListView嵌套冲突(一)

相信大家都已经可以熟练使用ListView和GridView,大神们估计都在使用RecyclerView了.如果还在使用ListView,你肯定有这样的一个深刻的感受,那就是在做一个APP的时候使用ListView和GridView很频繁,并且经常会遇到一个页面中除了有ListView或GridView可能还有一些其他的内容,但是可能内容很多,你第一时间就会想到让它整体滑动即可,那就是在总的布局外面包裹一个ScrollView.也就是出现了ScrollView中嵌套一个ListView的场景,或

【Android - 问题解决】之ScrollView嵌套ListView时总是自动滑动到ListView顶部的问题

最近做了一个项目,里面有一个ScrollView嵌套ListView的布局. 做出来之后发现,进入这个界面之后,总是自动滑动到ListView的顶部,而ScrollView中位于ListView上面的一些控件就被挤到屏幕外面去了. 解决这个问题的方法如下: 在JAVA代码中,调用ScrollView对象的这个方法: scrollView.smoothScrollTo(0, 0);

ScrollView+ListView滚动冲突,没有滑动效果 解决办法

问题背景 今天做个界面需要在整个布局都要滚动的基础上添加一个ListView元素,整个布局滚动当然用ScrollView.但是在ScrollView+ListView的布局画好后,发现整个界面都无法滚动,而且ListView只显示了第一条元素. 查看布局提示:The vertically scrolling ScrollView should not contain another vertically scrolling widget (ListView). 问题分析: 由上面那个提示可以看到

ScrollView与ListView的冲突

众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌套导致ListView显示不全面 问题二:ScrollView不能正常滑动 解决方式一: ScrollView+LinearLayout+ListView可以换成ScrollView+LinearLayout+LinearLayout,对于开发中,ScrollView所能滚动的样式形式各异,另外的话

解决ScrollView与ListView事件冲突

1,在最近做项目的时候使用ScrollView嵌套ListView的时候发现ListView的滑动效果失效,简单的网上搜索了一下,也就有了下面的解决方法,在ListView中设置事件的监听listview.OnTouchListener(),让父控件不影响子控件的事件 1 2 3 4 5 6 7 8 9 listView.setOnTouchListener(new OnTouchListener() {                             @Override        

ScrollView 与ListView 滑动冲突完美解决

一.介绍ListView高度的设置方法 二.根据实际需求解决冲突问题 一.介绍ListView高度的设置方法 在ScrollView中使用ListView,ListView的高度会不正常. 方式一:在XML中写死  android:layout_width="match_parent" android:layout_height="120dp" 方式二:代码中设置固定高度(如果在运行过程中才能决定ListView高度) public void setHeight(i

安卓解决viewPager和scrollView和listView滑动冲突的问题

大家想想listView的实现方式 就是一个item一个item 添加到一个布局中, 那么LinearLayout可不可以像ListView 那样 往里面添加item  答案是可以的 我们先模拟listView 的LinearLayout类 public class LinearLayoutForListView extends LinearLayout { private ListAdapter adapter; private OnClickListener onClickListener