ListView中TextView的适配

来源:互联网 发布:福建随行软件下载 编辑:程序博客网 时间:2024/06/04 18:01

网上的listview和Scrollview嵌套等,需要listview高度自适应,但是如果item中有textview的时候,就只能检测到一行的高度,导致高度比实际的低,困惑我很久了,今天终于发现了解决方法

是在这里找到的解决方法,谢谢原文章作者

http://www.cnblogs.com/ning1121/p/4464457.html


首先自定义一个Listview,重写其中的onMeasure()方法


import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;public class MyListView extends ListView {    public MyListView(Context context) {    super(context);    }        public MyListView(Context context, AttributeSet attrs) {    super(context, attrs);    }        public MyListView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    }        @Override    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}


下一步就是通过方法设置listview的高度


public void setListViewHeightBasedOnChildren(ListView listView) {  // 获取ListView对应的Adapter  ListAdapter listAdapter = listView.getAdapter();  if (listAdapter == null) {   return;  }  int totalHeight = 0;  for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目   View listItem = listAdapter.getView(i, null, listView);   listItem.measure(0, 0); // 计算子项View 的宽高   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的Adapter后调用此方法便可。

 

但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。



再添加一个获取TextView实际高度的方法吧,也是今天找到,记录一下

 ViewTreeObserver observer = tv.getViewTreeObserver();        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);//避免重复监听                int height = tv.getMeasuredHeight();//获文本高度                //获取高度后要进行的操作就在这里执行,在外面可能onGlobalLayout还没有执行而获取不到height//                des_layout.setOnClickListener(new MyClickListner());//设置监听(其中用到了height值)                LogUtil.i("aaa", "height===" + height);            }        });








0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 穿吊带总是会露出来左胸罩杯怎么办 生小孩后腰部有一圈黑色勒痕怎么办 新买的饮水机热水口出水小怎么办 新买的饮水机热水口不出水怎么办 平胸没有适合自己的内衣怎么办 售楼小姐穿坏的丝袜都怎么办了 蛋白粉一天喝十克补不起来怎么办 跑步时没有卸妆毛孔堵塞了怎么办 自己做的葡萄酒太甜了怎么办 健身馆碰到一个帅的健身教练怎么办 随着年龄的增长脖子越来越短怎么办 安装软件时解析包出现问题怎么办 鼻子吸进去的气往嘴巴里怎么办 做完瑜伽之后大腿后侧特别紧怎么办 刚下生小狗腿后腿站不起来怎么办 脚被凳子压到了流血了怎么办还很痛 小狗脚被凳子压出血了怎么办 怀孕8个月脐带绕颈一周怎么办 练完瑜伽大腿两侧肌肉麻木怎么办 突然吃了辣火锅肚子烫怎么办 副鼻窦炎鼻头顶痛鼻子臭怎么办 一岁宝宝夜里睡觉不踏实怎么办 分手一个月了还是放不下前任怎么办 当晚上遇到烦心事睡不着该怎么办 为什么白天太累晚上就睡不着怎么办 白天走累的脚痛晚上睡不着怎么办 1岁宝宝感冒咳嗽流泪流鼻涕怎么办 宝宝不含母乳只吃奶瓶怎么办 宝宝习惯奶嘴不咬妈妈的乳头怎么办 我的乳晕和私处色素沉着怎么办 双盘打坐膝痛腿脚心处紫青怎么办? 双盘打坐两膝盖不能着地怎么办? 做完蹲起之后腿疼的受不了怎么办 孩子游泳学不会不想去了怎么办 自由泳打腿走水但水花大怎么办 老师上课发现学生课上自慰怎么办 生完孩子腿粗屁股大怎么办 产后42天检查子宫偏大怎么办 崇拜瑜伽老师喜欢上他了怎么办 练瑜伽下不了腰贴不住腿怎么办 吃母乳宝宝吸的奶头疼怎么办