Java tutorial
//package com.java2s; /* * Copyright (C) 2013 www.418log.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.widget.AbsListView; import android.widget.GridView; import android.widget.ListAdapter; import android.widget.ListView; public class Main { public static void setAbsListViewHeight(AbsListView absListView, int lineNumber, int verticalSpace) { if (lineNumber == 0) { return; } int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); ListAdapter mListAdapter = absListView.getAdapter(); if (mListAdapter == null) { return; } int totalHeight = 0; int count = mListAdapter.getCount(); ViewGroup.LayoutParams params = absListView.getLayoutParams(); if (absListView instanceof ListView) { for (int i = 0; i < count; i++) { View listItem = mListAdapter.getView(i, null, absListView); listItem.measure(w, h); totalHeight += listItem.getMeasuredHeight(); } if (count == 0) { params.height = verticalSpace; } else { params.height = totalHeight + (((ListView) absListView).getDividerHeight() * (count - 1)); } } else if (absListView instanceof GridView) { int remain = count % lineNumber; if (remain > 0) { remain = 1; } if (mListAdapter.getCount() == 0) { params.height = verticalSpace; } else { View listItem = mListAdapter.getView(0, null, absListView); listItem.measure(w, h); int line = count / lineNumber + remain; params.height = line * listItem.getMeasuredHeight() + (line + 1) * verticalSpace; } } ((MarginLayoutParams) params).setMargins(0, 0, 0, 0); absListView.setLayoutParams(params); } }