«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

[위미르 개발팀] Android, iOS , Web 제작

[안드로이드 레이아웃]ScrollView 내에 ListView 사용하기 본문

개발자료/Android

[안드로이드 레이아웃]ScrollView 내에 ListView 사용하기

위미르개발팀 2017. 11. 10. 09:41

권장되는 방법은 아니지만, 스크롤뷰 내에 리스트뷰를 사용해야만 하는 경우가 있습니다.


하지만 스크롤뷰에 리스트뷰를 넣게 된다면, 리스트뷰 자체의 스크롤과 스크롤뷰의 스크롤이 간섭이 생길수 있다는 점이 있고, 실제로 스크롤뷰에 리스트뷰를 넣는다면 리스트뷰의 높이를 match_parent로 설정해도 화면의 일부만 차지하는것을 확인 하실수 있습니다.


이럴때에는 리스트뷰의 아이템 개수만큼 높이를 설정 해주어서 리스트뷰 자체는 스크롤이 되지않고 스크롤뷰만 스크롤이 되도록 하면 됩니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void setListViewHeight(ArrayAdapter adpater, ListView listView) {
        int totalHeight = 0;
        int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
 
        for (int size = 0; size < listView.getCount(); size++) {
            View listItem = adpater.getView(size, null, listView);
            listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listView.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }
 
cs


리스트뷰의 아이템 개수만큼 높이를 가지도록 설정하도록 작성한 함수입니다.


리스트뷰에 아답터를 설정후 아답터에 리스트를 넣고 위의 함수를 호출 하시면됩니다.


하지만, 이렇게 강제로 높이를 주어서 스크롤이 되게 만들어도 리스트뷰 단일로 사용했을때보다는 성능이 떨어지고 


리프레시 될때 부자연스러운 퍼포먼스를 보여주기때문에 이러한 구성을 피할수 있다면 피하는것이 좋습니다.





희 위미르에서는 모바일 어플리케이션(Android/iOS), Web 개발을 해드리고 있습니다.


문의 전화 : 070-4177-3962

Comments