判断ListView的每一个item高度
来源:互联网 发布:小学生拼音软件下载 编辑:程序博客网 时间:2024/05/21 00:14
前提 这个item的根view必须是LinearLayout
package com.bxg.news.view;import android.view.View;import android.view.ViewGroup;import android.widget.ListAdapter;import android.widget.ListView;public class Utility { public static void setListViewHeightBasedOnChildren(ListView listView, View v) { // 获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); // 计算子项View 的宽高 totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度 } if (v != null) { totalHeight += v.getHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)) + 10; // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params); }}
这里需要注意的是:
如果TextView是多行的时候。需要对TextView进行重写onmeasure方法
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Layout layout = getLayout(); if (layout != null) { int height = (int) FloatMath.ceil(getMaxLineHeight(this.getText() .toString())) + getCompoundPaddingTop() + getCompoundPaddingBottom(); int width = getMeasuredWidth(); setMeasuredDimension(width, height); } } private float getMaxLineHeight(String str) { float height = 0.0f; float screenW = ((Activity) context).getWindowManager() .getDefaultDisplay().getWidth(); float paddingLeft = ((RelativeLayout) this.getParent()) .getPaddingLeft(); float paddingReft = ((RelativeLayout) this.getParent()) .getPaddingRight(); // 这里具体this.getPaint()要注意使用,要看你的TextView在什么位置,这个是拿TextView父控件的Padding的,为了更准确的算出换行 int line = (int) Math.ceil((this.getPaint().measureText(str) / (screenW - paddingLeft - paddingReft))); height = (this.getPaint().getFontMetrics().descent - this.getPaint() .getFontMetrics().ascent) * line; return height; }
欢迎关注我的微信公众号: androidesigner 。 一起学习,一起进步
0 0
- 判断ListView的每一个item高度
- 如何正确获得ListView的每一个item高度
- listview item的高度
- viewpager动态改变每一个item的高度
- ListView,点击每一个Item,如何获取当前Item的数据?
- Listview的Item高度计算
- listview设置计算item的高度 获取listview的高度
- 依次加载listview的每一个item实现动画的效果
- 给ListView的每一个item加一个分隔符。
- Android 取得 ListView中每一个Item项目的值
- Android捕获 ListView 每一个item的点击事件
- 关于ListView中Item的高度问题
- android给listview的item设定高度
- 设置listview中item项的高度
- android给listview的item设定高度
- 关于ListView中Item的高度问题
- 计算ListView中一个item的高度
- android给listview的item设定高度
- Mysql 报错:master and slave have equal MySQL server UUIDs
- POJ-1251 Jungle Roads(最小生成树)
- 开门大吉
- stl--------deque
- CentOS下安装JDK1.7
- 判断ListView的每一个item高度
- 揭开计算机的神秘面纱
- 微信公众平台企业号回调模式的URL验证--jdk6、jdk7加密问题
- 在Android中嵌入Unity3d
- wegg
- IIS SSL配置
- Spark入门到精通视频学习资料--第四章:基于Spark的流处理框架Spark Streaming(2讲)
- stl操作1
- 关于UIScrollView的简单使用及介绍