android 多个listView的向下滚动设置 listView动态设置高度代码

墨迹天气图:

这里都是用的android里面的shape实现的,实现起来比较简单,只是在滚动的时候有点小麻烦。。。

当我们多个ListView超出了它的父控件LinearLayout的时候,它们每个ListView都会有自己的滚动,这不是我们想要的效果,我开始想在LinearLayout外面再加一层ScrollView,但是这样一来,我们就遇到了ScrollView和ListView和冲突问题,会导致ListView显示不全。借网上代码理解,我们只有固定ListView的高度,让其不自动调整调整,就不会与ScrollView冲突了。代码如下:

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));
        ((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10);
        listView.setLayoutParams(params);
    }

在activity中的onCreate方法中调用该方法即可。

 

参考scrollView的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">

    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            >

        <ImageView
                android:id="@+id/list_view_corner_item_icon"
                android:layout_marginLeft="@dimen/list_view_corner_margin_left"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />

        <TextView
                android:id="@+id/list_view_corner_item_text"
                android:text="测试标题"
                android:textSize="20sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/list_view_corner_item_icon"/>

        <ImageView
                android:id="@+id/list_view_corner_item_arrow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/arrow"
                android:layout_centerVertical="true"
                android:layout_alignParentRight="true"
                android:layout_marginRight="15dp"/>
    </RelativeLayout>
</LinearLayout>

记得用LinearLayout包围该RelativeLayout,否则在方法中这一行listItem.measure(0, 0);会报空指针异常!

posted @ 2014-01-31 22:25  无忧之路  阅读(2145)  评论(0编辑  收藏  举报
无忧之路