티스토리 뷰

리스트뷰를 쓰게 되는 경우 한 화면에 표시될 항목 이상일 경우 스크롤을 처리 하도록 되어 있습니다. 그렇지만 간혹 가다 이 스크롤 처리 없이 리스트뷰 해당 아이템수 만큼 그대로 표시 해줄 필요가 있는 경우가 생기게 됩니다.  이럴 경우 사용할수 있는 것이 바로 아이템 수만큼 높이를 조절 해주는 아래의 소스 입니다.

public static void setListViewHeightBasedOnChildren(ListView 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(0, 0);
            listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();            
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        
        params.height = totalHeight;
        listView.setLayoutParams(params);
        
        listView.requestLayout();
    }


사용 방법은  리스트뷰에 adapter 한 후에  위 메소드를 호출 해주면 됩니다. 리스트뷰에 adapter된 아이템 만큼 길이가 늘어나므로scrollView속에 리스트 뷰를 넣어 사용 해야 합니다.

	
 listview1.setAdapter(adapter);
 setListViewHeightBasedOnChildren(listview1);



댓글