如何正确获得ListView的每一个item高度
来源:互联网 发布:魔镜淘宝助手插件 编辑:程序博客网 时间:2024/05/10 05:23
如何正确获得ListView的每一个item高度
最近Android中使用ListView 需要动态获取每个item的高度 来计算ListView的高度,计算过程中碰到一些问题,特此分享
前提 这个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; }
3 0
- 如何正确获得ListView的每一个item高度
- 判断ListView的每一个item高度
- ListView,点击每一个Item,如何获取当前Item的数据?
- listview item的高度
- viewpager动态改变每一个item的高度
- Android ListView的每个子Item如何设置高度
- Android ListView的每个子Item如何设置高度
- Android ListView的每个子Item如何设置高度
- Android ListView的每个子Item如何设置高度
- Listview的Item高度计算
- 如何禁止listview的item项获得焦点,而让item的子控件获得焦点
- 如何禁止listview的item项获得焦点,而让item的子控件获得焦点
- 如何禁止listview的item项获得焦点,而让item的子控件获得焦点
- 如何禁止listview的item项获得焦点,而让item的子控件获得焦点
- 如何禁止listview的item项获得焦点,而让item的子控件获得焦点
- listview设置计算item的高度 获取listview的高度
- 依次加载listview的每一个item实现动画的效果
- 实现ScrollView中包含ListView,动态设置ListView的高度(listview不能显示全,不能正确计算item的高度)
- Qt On Android开发环境安装、配置
- 京东注册页面
- hdu1588 Gauss Fibonacci(矩阵快速幂+二分求矩阵等比和)
- 从零开始学 iOS 开发的15条建议
- javaScript的设计模式之单例模式
- 如何正确获得ListView的每一个item高度
- 系统host文件的作用有哪些
- 浅析live555媒体库之入门编译使用
- poj2398Toy Storage【判断直线与点位置关系+排序+二分查找】
- 【POJ 1584】 A Round Peg in a Ground Hole (判凸包+判圆在凸包内)
- Objective-C 学习笔记:从HelloWorld开始
- 用cordova插件实现ionic第三方登录,获取信息和分享
- 66 GCD常用方法
- linux网络配置