簡體   English   中英

根據孩子計算listview的高度

[英]calculate listview height based on children

我在滾動視圖中有列表視圖,並計算子級的身高。 這是我使用的代碼:

 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項太大而不能)則將其最后一行修剪掉。

.xml中的層次結構

滾動視圖-> RelativeLayout-> LinearLayout-> ListView

在此處輸入圖片說明

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM