ListView嵌套ListView,TextView有多行文本显示不全不问题
来源:互联网 发布:mede2000数据库卸载 编辑:程序博客网 时间:2024/05/17 04:47
这是在网上找到的相关的解决方法,记录下来,方便以后查看。
关于ListView嵌套ListView,在网上找到的解决方法是调用自定义的方法动态计算listview的高度:
public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); // 计算子项View 的宽高 listItem.measure(0, 0); // 统计所有子项的总高度 totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1)); // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params); }
一开始一直使用这个方法,但是后来发现子listview的TextView显示多行文本时,计算就不准确了,在网上找到了其他的解决方法:
(1)
在listview中实现onMeasure方法:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }
测试了一下,发现这个方法是可行的。
(2)重写TextView的onMeature方法:(参考链接:点击打开链接)
@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)context).getWindowManager().getDefaultDisplay().getWidth(); float paddingLeft = ((LinearLayout)this.getParent()).getPaddingLeft(); float 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;}这个方法没有测试,先记录下来,以后再看看。
0 1
- ListView嵌套ListView,TextView有多行文本显示不全不问题
- listview嵌套listview子listview显示不全的问题
- android ListView嵌套GridView显示不全问题
- android ListView嵌套GridView显示不全问题
- 解决ScrollView嵌套ListView显示不全问题
- 解决ScrollView嵌套ListView显示不全问题
- ScrolView 嵌套ListView 显示不全的问题
- listview嵌套GridView显示不全的问题
- ListView、GridView等嵌套显示不全问题
- android listView多层嵌套listView显示不全问题
- Android ScrollView里嵌套listview,listview显示不全的问题
- android ScrollView嵌套ListView listview显示不全的问题
- Scrollview+ListView嵌套listview显示不全的问题
- 在scrollview中嵌套listview,listview显示不全问题
- ScrollView和ListView嵌套ListView显示不全问题
- 解决ScrollView嵌套ListView或ListView嵌套ListView,listview显示不全的问题
- scorll嵌套listview,显示不全
- ScrollView嵌套 ListView显示不全
- kindeditor 在springmvc中上传图片
- hdu1237 简单计算器
- 5.6.3.6 XMMatrixPerspectiveFovLH
- 为了相同的前缀-测谎仪
- Jquery 插入节点总结
- ListView嵌套ListView,TextView有多行文本显示不全不问题
- 为了相同的前缀-跳楼梯
- 话题10 千差万别----i++与++i的区别
- 在树莓派上安装麦克风监测音量
- iOS中的CoreData的使用(详解)
- 学习笔记 BIT(树状数组)
- Linux下修改Mysql的用户(root)的密码
- 20151123 ocp 052(10-30)
- 为了相同的前缀-北京热身复仇