package forezp.com.douyalibrary.utils; import android.annotation.SuppressLint; import android.content.Context; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; import android.widget.ListAdapter; import android.widget.ListView; /** * * 重新设置listview .grideview 的高度等 * Created by b508a on 2015/12/28. */ public class ListViewUtils { //根据item设置listview高度 public static void setListViewHeight(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); params.height += 5;//if without this statement,the listview will be a little short listView.setLayoutParams(params); } //根据item设置listview高度 public static void setListViewHeight(ListView listView, int n) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < n; i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (n - 1)); // params.height += 5;//if without this statement,the listview will be a little short listView.setLayoutParams(params); } //根据item设置listview高度 @SuppressLint("NewApi") public static void setGridViewHeight(Context context, GridView listView, int n) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < (listAdapter.getCount()+n-1)/n; i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); int spacing= ScreenUtils.dipToPx(context, 10); params.height = totalHeight+spacing*((listAdapter.getCount()-1)/n)+listView.getPaddingBottom()+listView.getPaddingTop(); params.height += 5;//if without this statement,the listview will be a little short listView.setLayoutParams(params); } //根据item设置listview高度 @SuppressLint("NewApi") public static void setGridViewWidth(Context context, GridView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredWidth(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.width = totalHeight+listView.getPaddingLeft()+listView.getPaddingRight(); params.width += 5;//if without this statement,the listview will be a little short listView.setLayoutParams(params); } //根据item设置listview高度 @SuppressLint("NewApi") public static int getGridViewHeight(GridView listView, int n) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return 0; } int totalHeight = 0; for (int i = 0; i < (listAdapter.getCount()+1)/n; i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } return totalHeight+5; } //根据item设置listview高度 @SuppressLint("NewApi") public static int getGridViewWidth(GridView listView, int n) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return 0; } int totalHeight = 0; for (int i = 0; i <listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredWidth(); } return totalHeight+5; } //根据item设置listview高度 @SuppressLint("NewApi") public static void setViewHeight(ViewPager listView, int height) { ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = height; params.height += 5;//if without this statement,the listview will be a little short listView.setLayoutParams(params); } /** * 在Scrollview 下的ListView全部展开的方法 * * @param listView */ public static void setListViewHeightBasedOnChildren(ListView listView) { if (listView == null) return; ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); // 本来是getCount-1 ,因为设置了paddingtop 和paddingButton params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() + 1)); listView.setLayoutParams(params); } }