完美解决ListView 与 ScrollView 共存问题

1:首先设置ListView的高度,在setAdapter之后调用此方法。

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
               return;
        }
        
        int totalHeight = 0;
        int len = listAdapter.getCount();
        for (int i = 0; i < len; i++) {   
               View listItem = listAdapter.getView(i, null, listView);
               listItem.measure(0, 0);  //计算子项View 的宽高
               totalHeight += listItem.getMeasuredHeight();  //统计所有子项的总高度
        }
        
        ViewGroup.LayoutParams params = listView.getLayoutParams();

        params.height =totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        
        listView.setLayoutParams(params);
    }

2:如果ListView中的数据是单行的以上代码没有问题,如果Item行数不固定则要重写ListView的onMeasure方法重新计算每个Item的高度。

public class WListView  extends ListView{

    public WListView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public WListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    public WListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //根据模式计算每个child的高度和宽度
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

这样就解决了。

在使用的时候通过多态的方式进行。例如:

(1) activity_xxsd.xml

<com.wzh.view.WListView
android:background="@drawable/xxsd_content_bg"
android:id="@+id/lvXxsdZxtzTitles"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

(2) XxsdActivity.java

private ListView lvXxsdZxtzTitles = null;

...

lvXxsdZxtzTitles=(WListView)findViewById(R.id.lvXxsdZxtzTitles);

 

posted @ 2013-12-07 12:03  yshy  阅读(322)  评论(0编辑  收藏  举报