Android 动态设置 ListView 和 GridView 高度
来源:互联网 发布:阿里云服务器空间清理 编辑:程序博客网 时间:2024/05/20 02:56
1 需求分析
我们可能会有这样的需求,ListView添加了一个头部,然后头部里面有一个ListView或者GridView,当你按照正常的方式给头部的ListView或者GridView设置数据的时候,发现它只能显示一行!!!这可不是我想要的。
那么怎么办呢?最直接的办法,就是在xml布局中给头部的ListView或者GridView设置固定的高度。虽然这样可以出来效果,但是显然不是我想要的。因为数据不能确定,高度也不会固定,设置固定高度怎么可以!!!
既然如此,那就在代码中为他们动态设置高度吧。
最重要的,也是最关键的就是怎么计算ListView和GridView的高度。
2 算法分析
ListView
要计算ListView的高度,很简单啊。首先,得知道有多少条数据,循环计算每一条item的高度,把他们相加就得出了总的高度。
GridView
要计算GridView的高度,方法类似,只不过要考虑到列数。比如有12条数据,设置为5列,那么就有三行数据。只要我们得到每一行的高度,然后再相加,就是我们想要的结果。
3 代码实现
ListView
//为listview动态设置高度(有多少条目就显示多少条目)public void setListViewHeight(ListView listView) { //获取listView的adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; //listAdapter.getCount()返回数据项的数目 for (int i = 0,len = listAdapter.getCount(); i < len; i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter .getCount() - 1)); listView.setLayoutParams(params);}
//使用方式,必须刷新Adapter
setListViewHeight(listView);listViewAdapter.notifyDataSetChanged();
GridView
public void setGridViewHeight(GridView gridview) { // 获取gridview的adapter ListAdapter listAdapter = gridview.getAdapter(); if (listAdapter == null) { return; } // 固定列宽,有多少列 int numColumns= gridview.getNumColumns(); //5 int totalHeight = 0; // 计算每一列的高度之和 for (int i = 0; i < listAdapter.getCount(); i += numColumns) { // 获取gridview的每一个item View listItem = listAdapter.getView(i, null, gridview); listItem.measure(0, 0); // 获取item的高度和 totalHeight += listItem.getMeasuredHeight(); } // 获取gridview的布局参数 ViewGroup.LayoutParams params = listView.getLayoutParams(); // 设置高度 params.height = totalHeight; // 设置参数 gridview.setLayoutParams(params); }
//使用方式,必须刷新Adapter
setGridViewHeight(gridView);gridViewAdapter.notifyDataSetChanged();
0 0
- Android 动态设置 ListView 和 GridView 高度
- android 动态设置listview gridview高度
- Android 动态设置ListView、GridView高度
- android 动态设置ListView 高度
- android给ListView动态设置高度
- listView 动态设置高度
- 动态设置ListView高度
- Listview和Gridview嵌套动态扩充列表高度
- 【Android】Item高度固定下动态设置ListView的高度
- ListView 动态设置高度问题
- ListView 动态设置高度问题
- 动态设置ListView的高度
- 动态设置listview的高度
- ListView 动态设置高度问题
- ListView 动态设置高度问题
- 动态设置listView的高度
- 动态设置listView的高度
- 动态设置listview的高度
- R里面数字取整相关的操作有一组函数: ceiling ;floor;trunc; round; signif
- Objective-C - self关键字和super关键字
- 后台学习研究路线
- ASP.NET MVC4学习1之初次见面,请多关照。
- Android动态加载的类型
- Android 动态设置 ListView 和 GridView 高度
- Android开发实践 巧用Activity和Fragment
- Redis数据过期策略探究
- 28.数组中出现次数超过一半的数字
- JavaScript[12.27]
- 系统工具类
- 编程之美(数字的魅力--最大子串和,积)
- XMPP视频讲解地址
- 第三方应用卡顿问题如何抓取systrace