ScrollView 안에 삽입된 ListView 또는 ExpandableListView의 Height이 조절되지 않는 현상
안드로이드/Component 2014. 9. 5. 11:09뜻하지 않게, ScrollView 안에 ListView 등의 리스트 형식의 Element를 넣어야 할 때가 있다.
안드로이드 권고사항은 아니지만, UI 를 이렇게 설계했다면 어쩔 수 없이 넣어야 하는데. (개인적인 생각으로는 이런 UI는 지양한다. 대체 누가 이렇게 설계하는거야 -_-^ 짱나게)
암튼, 그럼에도 방법은 있다.
ScrollVIew 의 속성중에 android:fillViewport="true" 로 속성을 주고,
Java code단에서 아래와 같은 메소드를 작성해주고 호출해준다.
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(desiredWidth, MeasureSpec.UNSPECIFIED); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); listView.requestLayout(); }이 메소드를 listview의 setApdater 직 후에 넣어준다. ExpandableListView 의 경우는 setAdapter 직 후에 넣어주고, setOnGroupClickListener 를 선언하고, onGroupClick 안에서 한번 더 호출해준다.
expandableListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { setExpandableListViewHeight(parent, groupPosition); return false; } });
'안드로이드 > Component' 카테고리의 다른 글
ConstraintLayout -2 체인 (0) | 2017.06.20 |
---|---|
Constraint Layout -1 (0) | 2017.06.19 |
ListView Background Selector (0) | 2015.03.20 |
안드로이드 ViewPager 및 Fragment ActionBar (0) | 2014.08.27 |
EditText 글자수 제한 (0) | 2014.07.17 |