listview计算高度是的奇异问题
来源:互联网 发布:优酷下载器 mac 编辑:程序博客网 时间:2024/06/06 01:11
listview计算高度是的奇异问题
在这里介绍的是当listview的item有过多textview时,计算listview高度不准确的问题。因为textview的边距以及行高问题,导致计算高度时不准确。这时候需要重写textview才能解决这个问题。
public class TextViewMeasure extends TextView { public TextViewMeasure(Context context) { super(context); } public TextViewMeasure(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewMeasure(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override 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) getContext()).getWindowManager().getDefaultDisplay().getWidth(); float paddingLeft = 0; float paddingReft = 0; if (this.getParent() instanceof RelativeLayout){ paddingLeft = ((RelativeLayout) this.getParent()).getPaddingLeft(); paddingReft = ((RelativeLayout) this.getParent()).getPaddingRight(); }else if (this.getParent() instanceof LinearLayout){ paddingLeft = ((LinearLayout) this.getParent()).getPaddingLeft(); paddingReft = ((LinearLayout) 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; }}
当listview中的textview都替换为TextViewMeasure时,即可使用下面方法获取listview高度。
public static int getTotalHeightofListView(ListView listView) { ListAdapter mAdapter = listView.getAdapter(); if (mAdapter == null) { return 0; } int totalHeight = 0; for (int i = 0; i < mAdapter.getCount(); i++) { View mView = mAdapter.getView(i, null, listView); mView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); totalHeight += mView.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (mAdapter.getCount() - 1)); listView.setLayoutParams(params); listView.requestLayout(); return params.height; }
0 0
- listview计算高度是的奇异问题
- android 计算ListView 高度
- 计算listview的高度
- 计算listview高度
- 重新计算Listview高度
- 计算listview的高度
- 动态计算Listview高度
- 计算ListView高度
- 重新计算listview高度
- listview 动态计算高度
- ListView高度计算
- 计算listview一项高度
- 计算listview的高度,这样才能在scllowView里面嵌套listview不会出现高度问题
- android scrollview嵌套listview计算高度的问题
- ScrollView中嵌套ListView高度无法计算问题
- listview计算高度为空
- Listview的Item高度计算
- ListView的高度计算公式
- Java基础——Java重点基础之IO流(二)
- 最小生成树prim(普里姆)算法
- 浅谈JS中的原型链
- 代理模式
- 【API管理系统showdoc部署】+【CentOS-5.10 YUM 方式安装NGINX+PHP】
- listview计算高度是的奇异问题
- HDU 5228 ZCC loves straight flush
- Hadoop1.1.2集群安装(Vmware+CenterOS6.5.X64)
- [Unity3D学习]Unity代码热更新解决方案测试结果总结
- CVPR 2013 录用论文
- eclipse中Android模拟器,DDMS看不到设备的解决及有时无打印Log
- JavaScript绑定事件的方法[3种]
- 【Java|Android】时间日期工具
- Javascript函数和事件