ListView 設置高度爲剛好能包裹子元素

當我們的程序中有多個ListView 時怎麼設置ListView 的高度成了一個問題。
ListView中數據個數是不確定的,顯然不能將高度寫死。
但通過測試發現,無論將高度設置爲匹配父控件還是包裹內容,都不能正常顯示所有內容。
通過在網上查找資料,我找到如下解決辦法。
首先將多個ListView包裹在LinerLayout中,然後將LinerLayou放到ScrollView中。這樣多個ListView 就可以滾動了。
關於ListView 的高度,用以下代碼可以設置

private void setListViewHeightBasedOnChildren(ListView listView){
        ListAdapter adapter = listView.getAdapter();
        if(adapter == null){
            return;
        }
        int totalHeight = 0;
        for(int i=0;i<adapter.getCount();i++){
            View listItem = adapter.getView(i,null,listView);
            .getResources().getDisplayMetrics().widthPixels, View.MeasureSpec.EXACTLY), 0);
            //此處很重要,不要用measure(0,0);否則item中如果有換行,顯示不完全
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight+(listView.getDividerHeight()*(adapter.getCount()-1));
        listView.setLayoutParams(params);
    }
發佈了81 篇原創文章 · 獲贊 103 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章