Рассчитать высоту списка на основе детей
У меня есть представление списка в представлении прокрутки и сделать расчет высоты базы детей. Вот код, который я использую:
public static void SetListViewHeightBasedOnChildren (ListView listView)
{
IListAdapter listAdapter = listView.Adapter;
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.PaddingTop + listView.PaddingBottom;
for (int i = 0; i < listAdapter.Count; i++) {
View listItem = listAdapter.GetView (i, null, listView);
listItem.LayoutParameters = new Android.Views.ViewGroup.LayoutParams (
ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
listItem.Measure (0, 0);
totalHeight += listItem.MeasuredHeight;
}
ViewGroup.LayoutParams params_ = listView.LayoutParameters;
params_.Height = totalHeight + (listView.DividerHeight * listAdapter.Count) + 50;
listView.LayoutParameters = params_;
listView.RequestLayout ();
}
как правило, это работает хорошо, но в некоторых случаях (если элемент списка слишком велик и т. д.) последний ряд обрезается.
иерархия в.xml
Представление прокрутки -> RelativeLayout -> LinearLayout->ListView
1 ответ
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();
}