博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 关于在ScrollView中加上一个ListView,ListView内容显示不完全(总是显示第一项)的问题的两种简单的解决方案...
阅读量:6810 次
发布时间:2019-06-26

本文共 1907 字,大约阅读时间需要 6 分钟。

是这样的哈:

有这样一个需求:

  1.显示一个界面,界面上有一个列表(ListView),列表上面有一个可以滚动的海报。

  2.要求在ListView滚动的过程中,ListView上面的海报也可以跟着ListView滚动。

我们的一般解决方案:

1.使用ScrollView嵌套这一个ListView。

对,这样的布局本身是没哟什么问题的。但是问题来了,当你运行你的界面的时候,突然发现,你的列表中明明有好多项,但是为什么只显示一项呢?仔细检查你会发现,不是列表只显示一项,而是其它的项被布局本身遮住了。

 

 

怎么办呢?下面将给出两种相对简单的解决方案:

第一种:禁用ListView的滚动(Scroll)。

第二种:计算ListView中每一项的高度,然后根据每一项的高度“乘以”项数,计算出ListView的总高度。

 

下面给出第一种方法的代码展示:

import android.widget.ListView;public class MyListView extends ListView{    public MyListView(android.content.Context context,android.util.AttributeSet attrs){          super(context, attrs);      }      /**      * 设置不滚动      */      public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)      {          int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                  MeasureSpec.AT_MOST);          super.onMeasure(widthMeasureSpec, expandSpec);        }  }

以下是第二种方法的的代码:

/**动态改变listView的高度*/    public void setListViewHeightBasedOnChildren(ListView listView) {          ListAdapter listAdapter = listView.getAdapter();          if (listAdapter == null) {           return;          }          int totalHeight = 0;         for (int i = 0; i < listAdapter.getCount(); i++) {           View listItem = listAdapter.getView(i, null, listView);           listItem.measure(0, 0);           totalHeight += listItem.getMeasuredHeight();//           totalHeight += 80;          }          ViewGroup.LayoutParams params = listView.getLayoutParams();//          params.height = 80 * (listAdapter.getCount() - 1);//          params.height = 80 * (listAdapter.getCount());          params.height = totalHeight            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));          ((MarginLayoutParams) params).setMargins(0, 0, 0, 0);          listView.setLayoutParams(params);                   }

到此为止问题结束。如果哪位朋友有更好的解决办法,别忘了提出来分享一下哈。

转载于:https://www.cnblogs.com/tony-yang-flutter/p/3344636.html

你可能感兴趣的文章
Provisioning Services 7.8 入门系列教程之一 部署学习环境介绍
查看>>
xen虚拟化实战系列(十一)之xen虚拟机磁盘文件挂载
查看>>
技术分享连载(四十五)
查看>>
hive lock监控
查看>>
NICs bonding in openfiler 2.3
查看>>
bash shell退格键乱码
查看>>
分治法实现大数相乘 C#实现
查看>>
Msg 9002 The transaction log for database '' is full
查看>>
高斯求和1+2+3+······+n-1+n=?
查看>>
Android学习启动篇
查看>>
《Pro ASP.NET MVC 3 Framework》学习笔记之二十五【Filters】
查看>>
一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放...
查看>>
Adobe Indesign怎么让图片衬于文字下方?
查看>>
关于修改远程连接端口(3389端口修改)
查看>>
redis replication
查看>>
NoSQL生态系统——hash分片和范围分片两种分片
查看>>
轻松监控网络和系统,让网管软件来的更简单一些吧
查看>>
电信领域解决方案
查看>>
.net知识和学习方法系列(二十二)CLR-方法的参数out,ref
查看>>
网络系统传输负载测试
查看>>