android中怎么让listview的内容全部显示出来
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中怎么让listview的内容全部显示出来相关的知识,希望对你有一定的参考价值。
注意,如果listitem里面有textview的话,就当一行处理进行截取数字。public static void setListViewHeightBasedOnChildren(ListView listView)
// 获取ListView对应的Adapter WeiboContentAdapter listAdapter = (WeiboContentAdapter) listView.getAdapter(); if (listAdapter == null) return; Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextAlign(Align.LEFT); LinearLayout listItem; TextView tvContent; int totalHeight = 0; int lineCount = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) // listAdapter.getCount()返回数据项的数目 listItem = (LinearLayout)listAdapter.getView(i, null, listView); tvContent = (TextView) listItem.findViewById(R.id.tv_weibo_detail_content); lineCount = getLineCount(mPaint, ((SpannedString) tvContent.getText()).toString()); tvContent.measure(0, 0); // 计算子项View 的宽高 totalHeight += tvContent.getMeasuredHeight()*lineCount + 60; // 统计所有子项的总高度 ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)) ; // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params);
private static int getLineCount(Paint mPaint, String content) int index; int count = 0; while(content.length() > 0) index = mPaint.breakText(content, true, ResolutionUtil.getWPx()/2, null); content = content.substring(index); count++; return count;
/** * 动态改变listView的高度 * @param pull */ private void setPullLvHeight(ListView pull) int totalHeight = 0; for (int i = 0, len = adapter.getCount(); i < len; i++) //listAdapter.getCount()返回数据项的数目 View listItem = adapter.getView(i, null, pull); listItem.measure(0, 0); //计算子项View 的宽高 totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度 ViewGroup.LayoutParams params = pull.getLayoutParams(); params.height = totalHeight + (pull.getDividerHeight() * (pull.getCount() - 1)); pull.setLayoutParams(params); 参考技术A 一、获取并设置ListView内容的高度:
复制内容到剪贴板
二、通过设置标签,来响应具体操作:
1.定义标签,及点击后的处理方法
复制内容到剪贴板
2.监听ListView点击设置
复制内容到剪贴板代3.自定义DevAdapter,主要添加了存储tags内容和获取点击项tag内容,以确定点击操作,供 2 使用。复制内容到剪贴板
4.添加ListView项时,对应添加tag到tags中
复制内容到剪贴板
注意:listView中的adapter里的getview中的view,只能是单个view 或是线性布局,不能为相对布局(可把相对布局放在线性布局中). 参考技术B 注意,如果listitem里面有textview的话,就当一行处理进行截取数字。
public static void setListViewHeightBasedOnChildren(ListView listView)
// 获取ListView对应的Adapter WeiboContentAdapter listAdapter = (WeiboContentAdapter) listView.getAdapter(); if (listAdapter == null) return; Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextAlign(Align.LEFT); LinearLayout listItem; TextView tvContent; int totalHeight = 0; int lineCount = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) // listAdapter.getCount()返回数据项的数目 listItem = (LinearLayout)listAdapter.getView(i, null, listView); tvContent = (TextView) listItem.findViewById(R.id.tv_weibo_detail_content); lineCount = getLineCount(mPaint, ((SpannedString) tvContent.getText()).toString()); tvContent.measure(0, 0); // 计算子项View 的宽高 totalHeight += tvContent.getMeasuredHeight()*lineCount + 60; // 统计所有子项的总高度 ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)) ; // listView.getDividerHeight()获取子项间分隔符占用的高度 // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params);
private static int getLineCount(Paint mPaint, String content) int index; int count = 0; while(content.length() > 0) index = mPaint.breakText(content, true, ResolutionUtil.getWPx()/2, null); content = content.substring(index); count++; return count;
/** * 动态改变listView的高度 * @param pull */ private void setPullLvHeight(ListView pull) int totalHeight = 0; for (int i = 0, len = adapter.getCount(); i < len; i++) //listAdapter.getCount()返回数据项的数目 View listItem = adapter.getView(i, null, pull); listItem.measure(0, 0); //计算子项View 的宽高 totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度 ViewGroup.LayoutParams params = pull.getLayoutParams(); params.height = totalHeight + (pull.getDividerHeight() * (pull.getCount() - 1)); pull.setLayoutParams(params);
android listView嵌套gridview的使用心得
在开发的过程中可能需要用到listview嵌套gridview的场景,但是在Android中,不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动事件,导致只显示一到两行数据。那么就换一种思路,首先让子控件的内容全部显示出来,禁用了它的滚动。如果超过了父控件的范围则显示父控件的scrollbar滚动显示内容,思路是这样,一下是代码。
具体的方法是自定义GridView组件,继承自GridView。重载onMeasure方法:
public class MyGridView extends GridView { public MyGridView(android.content.Context context, android.util.AttributeSet attrs) { super(context, attrs); } /** * 设置不滚动 */ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
其中onMeasure函数决定了组件显示的高度与宽度;
makeMeasureSpec函数中第一个函数决定布局空间的大小,第二个参数是布局模式
MeasureSpec.AT_MOST的意思就是子控件需要多大的控件就扩展到多大的空间
同样的道理,ListView也适用
以上是关于android中怎么让listview的内容全部显示出来的主要内容,如果未能解决你的问题,请参考以下文章
android listView嵌套gridview的使用心得
android listView嵌套gridview的使用心得