[英]calculate listview height based on children
我在滾動視圖中有列表視圖,並計算子級的身高。 這是我使用的代碼:
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 ();
}
通常,它的效果很好,但在某些情況下(如果listview項太大而不能)則將其最后一行修剪掉。
.xml中的層次結構
滾動視圖-> RelativeLayout-> LinearLayout-> 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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.