布局中,如果设计ListView的高度为包裹内容,那么ListView的高度是随着它的子条目的数量的变化而改变的,

这就可能会导致ListView下面的一些控件的位置也会随着ListView的高度的变化而变化。

项目中可能会碰到需要动态调整或控制ListView的高度的情况,下面就分享一下我自己使用的一种办法。

我遇到的问题:

ListView下面有一个Button,如果ListView子条目的数量较少,Button可以正常显示在屏幕上,但如果ListView子条目的数量较多时,Button就会被挤出屏幕

因为考虑效果(Button要紧跟着ListView),所以不能把ListView的高度写死,所以要使用包裹内容,

那么问题就是要解决Button的显示,保证Button不被挤出屏幕

设计思路:

ListView子条目数量少时,下面紧跟着Button,

ListView子条目多时,Button显示在屏幕底部,ListView的高度固定到Button上方

解决思路:

1、先计算出固定不变的控件的高度(屏幕中有些控件的大小是不需要改变的),基本就是除了ListView以外的控件(还要考虑是否需要计算状态栏的高度)

2、获取屏幕的高度

3、用屏幕高度 减掉 固定不变的高度 得到ListView的最大允许高度

4、计算ListView每个子条目的高度并累加,得到ListView的真实高度

5、判断真实高度和最大允许高度的差值,如果真实高度超出了最大允许高度,就把ListView的高度设定为最大允许高度,否则就不需要处理

代码:

/**
  * 测量控件高度的方法:
  * @param view 需要测量的控件
  * @return 测量到的高度
  */

public int mesHeight(View view) {
  int width = View.MeasureSpec.makeMeasureSpec(0,
    View.MeasureSpec.UNSPECIFIED);
  int height = View.MeasureSpec.makeMeasureSpec(0,
    View.MeasureSpec.UNSPECIFIED);
  view.measure(width, height);
  return view.getMeasuredHeight();
 }

step1:

// 固定不变的高度自己想办法计算吧,情况不同,计算方法也不同

// 提供一些信息:有固定值的直接累加,另外如果有margintop和marginbottom属性的也要加上,没有有固定值的使用上面的方法计算

// 如果需要计算状态栏高度的,也可以在网上搜索一下,应该有很多

step2:

// 获取屏幕高度

int screenHeight = getWindowManager().getDefaultDisplay().getHeight();

step3:

screenHeight 减掉 你计算的固定高度

step4:

// ListView子条目的高度也需要自己计算,情况不同方法不同,但思路和上面的固定高度的算法思路一样

step5:

// 当前listview的总高度

int currentHeight = 0;  :
  for (int i = 0; i < lv.size(); i++) {
   currentHeight += item;
  }

if (currentHeight > maxHeight) {
   LayoutParams param = new LayoutParams(LayoutParams.FILL_PARENT,
     maxHeight);
   lv.setLayoutParams(param);
   lv.setPadding(0,0, 0,0);//看个人情况
   lv_classes.setDivider(null);//看个人情况
  }

方法中代码不完整,主要是因为每个项目中的布局都是不一样的,所以无法给出一个准确的计算方法,但提供的思路希望能起到帮助。

Android - 动态调整ListView高度的更多相关文章

  1. Android重绘ListView高度

    Android重绘ListView高度 经常会有这样需求,需要ListView默认将所有的条目显示出来,这就需要外层使用ScrollView,ScrollView里面放置一个重绘高度的ListView ...

  2. 动态调整UITableViewCell高度的实现方法

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa ...

  3. android 动态改变listview的内容

    本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...

  4. Android 动态获取ListView的高度

    public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = l ...

  5. ScrollView嵌套listview 时根据内容动态设置listview高度

    public static void setListViewHeightBasedOnChilds(ListView listView){ ListAdapter listAdapter = list ...

  6. 如何实现可动态调整隐藏header的listview

    (转自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html) 需求:根据某种需要,可能需要动态调整listview的页眉页脚,譬如将header作 ...

  7. HighCharts 图表高度动态调整

    HighCharts 图表高度动态调整 前言 在使用HighCharts控件过程中,发现图表可以自适应div的高度,无法根据图表x.y轴的数量动态调整div高度,否则图标挤在一起,看起来非常不美观,也 ...

  8. 实现ScrollView中包含ListView,动态设置ListView的高度

    ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...

  9. Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...

随机推荐

  1. Spring.Net实现IOC和DI

    一:在Asp.net MVC中应该怎样使用Spring.Net?1:先导入dll文件. 2:将案例中的Config文件夹拷贝到项目中. 3:修改Config文件夹中的相关的配置信息. type里面填写 ...

  2. Oracle创建/删除表空间和用户(2014-3-10 记)

    /*创建表空间名为:DB_NAME*/ create tablespace DB_NAME datafile 'E:\oracle_data\db_name.dbf' size 100M autoex ...

  3. 给jar包进行数字签名(2014-06-28记)

    整理一下两年前用到的一些资料. 为了使Applet或者Java Web Start程序能够访问客户端本地资源,需要对Applet或者JWS程序jar包进行数据签名,当客户端打开Applet或者JWS程 ...

  4. 使用percona-toolkit校验主从数据的一致性

    主从数据校验使用percona-toolkit工具集的以下两个工具(主库上使用): pt-table-checksum  #检查主从数据是否一致, pt-table-sync #把主库数据同步到从库 ...

  5. 【转】mysql安装图解

    转载地址:http://www.jb51.net/article/23876.htm 很多朋友刚开始接触mysql数据库服务器,下面是网友整理的一篇mysql的安装教程,步骤明细也有详细的说明.   ...

  6. [课程设计]Scrum 1. 8多鱼点餐系统开发进度(完善整个订餐页面工作)

    [课程设计]Scrum 1. 8多鱼点餐系统开发进度(完善整个订餐页面工作) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题: ...

  7. hdu 5779 Tower Defence

    题意:考虑由$n$个结点构成的无向图,每条边的长度均为$1$,问有多少种构图方法使得结点$1$与任意其它节点之间的最短距离均不等于$k$(无法到达时距离等于无穷大),输出答案对$1e9+7$取模.$1 ...

  8. 深入理解C++的动态绑定和静态绑定【转】

    转自:http://blog.csdn.net/chgaowei/article/details/6427731 为了支持c++的多态性,才用了动态绑定和静态绑定.理解他们的区别有助于更好的理解多态性 ...

  9. spring cache

    spring-ehcache.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans ...

  10. [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)

    树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...