Рассчитать высоту списка на основе детей

У меня есть представление списка в представлении прокрутки и сделать расчет высоты базы детей. Вот код, который я использую:

 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 ();
    }

как правило, это работает хорошо, но в некоторых случаях (если элемент списка слишком велик и т. д.) последний ряд обрезается.

иерархия в.xml

Представление прокрутки -> RelativeLayout -> LinearLayout->ListView

введите описание изображения здесь

1 ответ

 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();
}
Другие вопросы по тегам