浅谈ScrollView嵌套ListView及ListView嵌套的高度计算

引言

  在Android开发中,我们有时会需要使用ScrollView中嵌套ListView的需求。例如:在展示信息的ListView上还有一部分信息展示区域,并且要求这部分信息展示区域在ListView信息比较多的时候也是可以滑动的,而不是固定不变的。这时,我们一般会将ScrollView和ListView嵌套在一起使用。但是这会导致ListView展示不全,然后也会有滑动冲突问题。下面我们来看看怎么解决。

解决方案

  主动计算和设置ListView的高度,这样就可以合理的展示ListView的高度。代码如下:

 1 public void setListViewHeightBasedOnChildren(ListView listView) {
 2         // 获取ListView对应的Adapter
 3         ListAdapter listAdapter = listView.getAdapter();
 4         if (listAdapter == null) {
 5             return;
 6         }
 7         int totalHeight = 0;
 8         // listAdapter.getCount()返回数据项的数目
 9         for (int i = 0; i < listAdapter.getCount(); i++) {
10             View listItem = listAdapter.getView(i, null, listView);
11             // 计算子项View 的宽高
12             listItem.measure(0, 0);
13             // 统计所有子项的总高度
14             totalHeight += listItem.getMeasuredHeight();
15         }
16         ViewGroup.LayoutParams params = listView.getLayoutParams();
17         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
18         // listView.getDividerHeight()获取子项间分隔符占用的高度
19         // params.height最后得到整个ListView完整显示需要的高度
20         listView.setLayoutParams(params);
21     }
时间: 2024-07-29 23:31:53

浅谈ScrollView嵌套ListView及ListView嵌套的高度计算的相关文章

ListView嵌套ScrollView后,设置dividerHeight属性后高度计算

当我们需要在listView外层嵌套ScrollView,这样两个scroll滚动效果会产生相互影响,为了避免这个,我们通常是禁止listView滚动, 把ListView总高度计算出来,完全显示. 计算listView的总高度只需要自定义一个mylistView继承listView,重写onMeasure(...)方法就搞定了. @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { i

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

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

ScrollView下嵌套GridView或ListView默认不在顶部的解决方法

当ScrollView下嵌套GridView或ListView时,如果内容超过一屏默认位置不在ScrollView的顶部,用scrollViewMsg.scrollTo(0,0)设置也不起作用,这是因为嵌套GridView或ListView获了焦点,解决方法有如下几种: 方法1把ScrollView里的第一个View获取焦点: baseView.setFocusable(true); baseView.setFocusableInTouchMode(true); baseView.request

ScrollView中嵌套两个ListView

做的项目中要使用两个ListView在同一个页面上下显示,因为数据源不同,不能通过在Adapter中设置标志位去区分显示,最后只能硬着头皮做一个ScrollView嵌套两个ListView,但按正常情况是不能同时显示的,会出现上面的ListView完全显示,下面的只显示一个Item,查了一些资料终于成功了 主要有一个ListViewUtility ,代码如下: import java.io.File; import android.content.Intent; import android.n

ScrollView中嵌套GridView,Listview的办法

按照android的标准,ScrollView中是不能嵌套具有滑动特性的View的,但是有时如果设计真的有这样做的需要,或者为了更方便简单的实现外观(比如在外在的大布局需要有滑动的特性,并且内部有类似于List的UI结构,那么ListView + Adpater的方式来实现里面的效果就很方便,算是违规抄近道的一种方式吧),有时就会不得不采用这种怪异的组合方式. 先说下这种方式如果不做特殊处理时会出现的冲突和问题: 1,在SrollView中嵌套ListView,ListView的显示会有问题,只

四种方法解决scrollview嵌套listview,listview高度确定问题

以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结构的原因.这个结构碰到的问题.几种解决方案和优缺点比较,这4个方面来为大家阐述.分析.总结. 实际上不光是ListView,其他继承自AbsListView的类也适用,包括ExpandableListView.GridView等等,为了方便说明,以下均用ListView来代表

scrollview 中嵌套多个listview的最好解决办法

在scrollview中嵌套多个listview的显示问题. 只需要调用如下的方法传入listview和adapter数据即可. /** * 动态设置ListView组建的高度 */ public static void setListViewHeightBasedOnChildren(ListView listView,Adapter adapter) { Adapter listAdapter = (Adapter) listView.getAdapter(); if (listAdapte

解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题.今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题. 1.ScrollView布局中嵌套Listview显示不正常的解决方案 目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种. (1)自定义一个Listview,继承自Listview,代码如下: public class ListV

Android之ScrollView嵌套ListView冲突 (listView只显示一行)

在ScrollView中嵌套使用ListView,ListView只会显示一行多一点.两者进行嵌套,即会发生冲突.由于ListView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView,那么里面的ScrollView高度计算就会出现问题.我们也就无法得到想要的效果.下面进入正题,我们将讨论ScrollView中嵌套ListView情况.核心解决方案: 重写ListView或者GridView的OnMesure 方法.对GridView同样适用. protect