Android

스크롤뷰 안에 ListView 가 늘어나지 않고, 스크롤 바가 생기는 이슈

Machine_웅 2020. 8. 26. 17:37
728x90
반응형
    // test
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return;
        }
        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.AT_MOST);
        int totalHeight = 0;
        View view = null;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            view = listAdapter.getView(i, view, listView);
            if (i == 0) {
                view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, WindowManager.LayoutParams.WRAP_CONTENT));
            }
            view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
            totalHeight += view.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

 

 

출처 :  www.it-swarm.dev/ko/android/listview%EB%A5%BC-%EC%B6%95%EC%86%8C%ED%95%98%EC%A7%80-%EC%95%8A%EA%B3%A0-scrollview%EC%97%90-%EB%84%A3%EC%9D%84-%EC%88%98-%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C/969129306/

 

android — ListView를 축소하지 않고 ScrollView에 넣을 수 있습니까?

대부분의 경우에 제안 된 setListViewHeightBasedOnChildren () 메서드가 작동하지만, 경우에 따라서는 많은 항목이있는 경우 특히 마지막 요소가 표시되지 않습니다. 그래서 단순한 버전의 ListView 동작을

www.it-swarm.dev

 

 

 

public static boolean setListViewHeightBasedOnItems(ListView listView) {

        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter != null) {

            int numberOfItems = listAdapter.getCount();

            // Get total height of all items.
            int totalItemsHeight = 0;
            for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
                View item = listAdapter.getView(itemPos, null, listView);
                float px = 500 * (listView.getResources().getDisplayMetrics().density);
                item.measure(View.MeasureSpec.makeMeasureSpec((int) px, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                totalItemsHeight += item.getMeasuredHeight();
            }

            // Get total height of all item dividers.
            int totalDividersHeight = listView.getDividerHeight() *
                    (numberOfItems - 1);
            // Get padding
            int totalPadding = listView.getPaddingTop() + listView.getPaddingBottom();

            // Set list height.
            ViewGroup.LayoutParams params = listView.getLayoutParams();
            params.height = totalItemsHeight + totalDividersHeight + totalPadding;
            listView.setLayoutParams(params);
            listView.requestLayout();
            //setDynamicHeight(listView);
            return true;

        } else {
            return false;
        }
    }
728x90
반응형

'Android' 카테고리의 다른 글

FCM 푸시 헤드업 알림 안뜨는 경우 ( 포어그라운드 상태 )  (0) 2020.09.03
동적으로 뷰생성 (예시 )  (0) 2020.08.26
Glide 비우기  (0) 2020.08.12
다른 앱 실행하기  (0) 2020.07.29
android pdf url 받아서 보여주기  (0) 2020.07.21