如何设置listview每个item高度

如何设置listview每个item高度,第1张

1.在ListView的布局文件中把属性android:layout_height设置成"wrap_content"

<ListView

android:cacheColorHint="#00000000"

android:textColor="#ff435346"

android:textSize = "20sp"

android:id="@id/android:list"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout="@+id/textViewCurrentBase"

android:listSelector="#00000000"

android:drawSelectorOnTop="false"/>

2.设置子项xml文件(比如这里把一个item.xml设置成ListView的一行)的各个控件android:layout_height的值。这里80sp+40sp就是你需要的一行的高度了。

item.xml如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/TextView01"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView android:focusable="false"

android:textColor="@drawable/white"

android:id="@+id/ItemTitle"

android:layout_height="80sp"

android:layout_width="fill_parent" />

<TextView android:focusable="false"

android:id="@+id/ItemText"

android:textColor="@drawable/blue"

android:layout_height="40sp"

android:layout_width="wrap_content"

android:layout_below="@+id/ItemTitle" />

<Button

android:id="@+id/ItemButton"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_alignParentRight="true" />

</RelativeLayout>

希望有用。

注意,如果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 listItemTextView tvContentint totalHeight = 0int lineCount = 0for (int i = 0, len = listAdapter.getCount()i <leni++) { // 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 indexint count = 0while(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 = 0for (int i = 0, len = adapter.getCount()i <leni++) { //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)}

不知道题主的listview单项布局用的是自定义的还是系统的,如果是系统的那就改变不了,系统自带的布局就是类似simple_item这样的,在使用适配器adapter的时候也是new SimpleAdapter 这样。

如果自定义一个listview , 那在单项布局里就可以直接设置它的高度,layout_height="70dp" 。自定义listview的使用需要自己写一个list_item单项布局和相对应的adapter 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11301049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存