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
- ListView中TextView的适配
- android listview中textview的颜色变换
- ScrollView中使用ListView、TextView的问题
- 关于在listview中加textview的autolink的问题
- listview嵌套listview,子listview中有换行的textview展示有问题,肿么办?
- listview中设置textView使用方法etonitemclicklistener 无效的问题
- 解决ListView中TextView文字无法正常居中的问题
- 对于ListView中TextView的数据显示问题
- ListView 中Item TextView 跑马灯遇到的问题
- 关于listview的item中如果有textview,listview点击item没有效果的解决办法
- TextView和ListView的滑动
- 怎么获取ListView和GridView适配器中item上TextView和ListView控件的值
- Android ScrollView中嵌套ListView和TextView
- ListView 中 TextView 添加跑马灯效果
- textview 中处理spannable使得ListView的点击事件失效的解决方法
- android 在listview中实现点击textview改变checkbox的状态
- UIAutomator中滚动ListView获得目标TextView控件对象的经验点滴
- Android学习-实现一个ListView中由Checkbox和TextView构成的布局
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C. Felicity is Coming!
- HttpClient 实现get和post请求的过程
- 《Android开发艺术探索》阅读笔记(一)、activity生命周期 及 启动模式
- android基础组件--CardView
- 【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)
- ListView中TextView的适配
- jquery 点击旋转效果,点击图片旋转360度
- 【Usaco 2007 Dec gold】队列变换
- 替换空格
- poj2996
- csu1508 地图的四着色(剪枝+BFS DFS)
- 浅谈构造函数与析构函数的调用顺序
- Linux的五个查找命令:find,locate,whereis,which,type
- itextpdf的使用之中文字体