<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 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)