package cgeo.geocaching.utils; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; public final class ViewUtils { private ViewUtils() { // utility } /** * Sets ListView height dynamically based on the height of the items. * * @param listView to be resized * @return true if the listView is successfully resized, false otherwise */ public static boolean setListViewHeightBasedOnItems(final ListView listView) { final ListAdapter listAdapter = listView.getAdapter(); if (listAdapter != null) { final int numberOfItems = listAdapter.getCount(); // Get total height of all items. int totalItemsHeight = 0; for (int itemPos = 0; itemPos < numberOfItems; itemPos++) { final View item = listAdapter.getView(itemPos, null, listView); item.measure(0, 0); totalItemsHeight += item.getMeasuredHeight(); } // Get total height of all item dividers. final int totalDividersHeight = listView.getDividerHeight() * (numberOfItems - 1); // Set list height. final ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalItemsHeight + totalDividersHeight; listView.setLayoutParams(params); listView.requestLayout(); return true; } return false; } }