之前曾经就是做项目的时候,因为CornerListView的界面显示比较不错,所以经常用,但是突然发现嵌套在ScrollView中就会经常出现排布异常,很是苦恼的东西,两个不错的模块竟然无法存在,难道真的是“一山不容二货”,鱼与熊掌不可兼得?
没办法,还是都想要,所以就想办法了!
查资料,自己测试,终于有了解决方案!
首先看布局文件(不用变的):
1 <com.example.car_fast.view.CornerListView 2 android:layout_marginTop="10dip" 3 android:layout_marginLeft="10dip" 4 android:layout_marginRight="10dip" 5 android:layout_marginBottom="10dip" 6 android:id="@+id/qiyejianjie_list" 7 android:layout_width="fill_parent" 8 android:layout_height="wrap_content" 9 android:background="@drawable/shape_bg_listview" 10 android:layout_gravity="center" 11 android:divider="#ff996699" 12 android:dividerHeight="1dip" 13 android:cacheColorHint="#00000000" 14 android:listSelector="#00000000" />
接着就是具体的更改方案了:
首先,我们要做的是:
1.添加一个类Utility,在类中自定义一个全局的静态方法
setListViewHeightBasedOnChildren(ListView listView)
2.Utility.java 内容如下
package com.example.car_fast.dialog; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; public class Utility { public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度 } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } }
其次,先看原始代码(只写重要的部分吧):
//省略 // adapter=new SimpleAdapter(Qiyejianjie.this, arrayList, R.layout.simple_list_item_1, new String[]{"title"}, new int[]{R.id.item_title}); cornerListView.setAdapter(adapter); cornerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // //省略
更改后的代码:
//省略 // adapter=new SimpleAdapter(Qiyejianjie.this, arrayList, R.layout.simple_list_item_1, new String[]{"title"}, new int[]{R.id.item_title}); cornerListView.setAdapter(adapter); Utility.setListViewHeightBasedOnChildren(cornerListView); cornerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // //省略
只要结果,只要你稍微测试下,都是so easy的一件事儿!
方法,点到为止。