根据孩子计算listview的高度

时间:2018-11-01 12:35:27

标签: android listview xamarin xamarin.android android-layoutparams

我在滚动视图中有列表视图,并计算子级的身高。这是我使用的代码:

 public static void SetListViewHeightBasedOnChildren (ListView listView)
    {
        IListAdapter listAdapter = listView.Adapter;
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = listView.PaddingTop + listView.PaddingBottom;

        for (int i = 0; i < listAdapter.Count; i++) {
            View listItem = listAdapter.GetView (i, null, listView);
            listItem.LayoutParameters = new Android.Views.ViewGroup.LayoutParams (
                ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);

            listItem.Measure (0, 0);
            totalHeight += listItem.MeasuredHeight;
        }

        ViewGroup.LayoutParams params_ = listView.LayoutParameters;
        params_.Height = totalHeight + (listView.DividerHeight * listAdapter.Count) + 50;
        listView.LayoutParameters = params_;
        listView.RequestLayout ();
    }

通常来说,它很好用,但是在某些情况下(如果listview项太大而e)则将其最后一行修剪掉。

.xml中的层次结构

  

滚动视图-> RelativeLayout-> LinearLayout-> ListView

enter image description here

1 个答案:

答案 0 :(得分:0)

 ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += listItem.getMeasuredHeight();
    }

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