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 |



