放置比较少的ListView组件效果图:
Item布局文件 list_view_item.xml 布局文件的内容:
<RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="50dp"
>
<ImageView
android:id="@+id/list_view_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dip"
android:padding="5dip" />
<TextView
android:id="@+id/list_view_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:gravity="center_vertical|center_horizontal"
android:layout_marginLeft="50dip"
android:text="@string/title_listview_activity"
android:textColor="#000"
android:textSize="16dp"
tools:context=".ListViewActivity" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="260dip"
android:src="@drawable/img_go"
android:padding="5dip" />
</RelativeLayout>
在Activity界面中放置ListView时,ListView组件比较少时,不需要滑动,这几个ListView组件都可以正常显示,当放置多时就不能如我们所愿,我们可以使用ScrollView组件来嵌套ListView组件这样就可正常显示了,原理就是 我们在代码中动态设置ListView组件的高度,下面我们来看srollView视图中嵌套ListView组件实现的方法:
/*
* 动态设置ListView组建的高度
*
* */
public void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); 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));
// params.height += 5;// if without this statement,the listview will be
// a
// little short
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
在为ListView组件的实例设置适配器时候,要对组件高度进行动态设置,调用上面的setListViewHeightBasedOnChildren(listView)方法即可:
listView.setAdapter(adapter);
setListViewHeightBasedOnChildren(listView);
listView1.setAdapter(adapter1);
setListViewHeightBasedOnChildren(listView1);
listView2.setAdapter(adapter2);
setListViewHeightBasedOnChildren(listView2);
动态配置ListView组件高度以后,效果图上方 第二张片所示!!!!!!