Android - 动态调整ListView高度
布局中,如果设计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高度的更多相关文章
- Android重绘ListView高度
Android重绘ListView高度 经常会有这样需求,需要ListView默认将所有的条目显示出来,这就需要外层使用ScrollView,ScrollView里面放置一个重绘高度的ListView ...
- 动态调整UITableViewCell高度的实现方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa ...
- android 动态改变listview的内容
本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...
- Android 动态获取ListView的高度
public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = l ...
- ScrollView嵌套listview 时根据内容动态设置listview高度
public static void setListViewHeightBasedOnChilds(ListView listView){ ListAdapter listAdapter = list ...
- 如何实现可动态调整隐藏header的listview
(转自:http://blog.sina.com.cn/s/blog_70b9730f01014sgm.html) 需求:根据某种需要,可能需要动态调整listview的页眉页脚,譬如将header作 ...
- HighCharts 图表高度动态调整
HighCharts 图表高度动态调整 前言 在使用HighCharts控件过程中,发现图表可以自适应div的高度,无法根据图表x.y轴的数量动态调整div高度,否则图标挤在一起,看起来非常不美观,也 ...
- 实现ScrollView中包含ListView,动态设置ListView的高度
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
- Android中动态更新ListView(转)
在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...
随机推荐
- 十七、Java基础---------集合框架之Map
前两篇文章中介绍了Collection框架,今天来介绍一下Map集合,并用综合事例来演示. Map<K,V> Map<K,V>:Map存储的是键值对形式的元素,它的每一个元素, ...
- yield return的作用
测试1: using UnityEngine; using System.Collections; public class test1 : MonoBehaviour { // Use this f ...
- Why does pthread_cond_signal not work?【转】
转自:http://stackoverflow.com/questions/16819169/why-does-pthread-cond-signal-not-work# 0 down vote fa ...
- Maven 使用介绍
1,创建Project 先去官方网站下载一个最新版本http://maven.apache.org/download.cgi. 下载后解压,使用之前最好先将maven的bin目录设置到path环境变量 ...
- [问题2015S13] 复旦高等代数 II(14级)每周一题(第十四教学周)
[问题2015S13] 设 \(A=(a_{ij})\) 为 \(n\) 阶实矩阵, 定义函数 \[f(A)=\sum_{i,j=1}^na_{ij}^2.\] 设 \(P\) 为 \(n\) 阶非 ...
- 用unity3d+cardboard开发一个全景图片查看器
一.建立全景播放场景: 建立一个unity项目,并建立videoplay场景,在场景中拖入一个球体,将全景照片拉到球体上,自动形成material和texture. 二.创建一个新的表面着色器,并修改 ...
- CentOS 6.5搭建PPTP VPN服务器
VPN是虚拟专用网络(Virtual Private Network)的缩写,VPN有多种分类方式,包括PPTP.L2TP.IPSec等,本文配置的VPN服务器是采用PPTP协议的,PPTP是在PPP ...
- java中正则表达式基本用法
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...
- C#定时执行一个操作
一个客户端向服务器端socket发送报文,但是服务器端限制了发送频率,假如10秒内只能发送1次,这时客户端也要相应的做限制,初步的想法是在配置文件中保存上次最后发送的时间,当前发送时和这个上次最后时间 ...
- collectionView布局原理及瀑布流布局方式
一直以来都想研究瀑布流的具体实现方法(起因是因为一则男女程序员应聘的笑话,做程序的朋友应该都知道).最近学习到了瀑布流的实现方法,瀑布流的实现方式有多种,这里应用collectionView来重写其U ...