ListView或GridView与ScrollView共存,高度显示问题

原创 2013年08月29日 14:48:49

自定义ListView(或GridView),重写里面的OnMeasure()方法重新计算高度

public class MyListView extends ListView {

	public MyListView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int expandSpaec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, expandSpaec);
	}
	
}
计算listView高度(各项不等高情况):

/**
	 * 动态设置ListView高度(各表项不等高)
	 * 
	 * @param listView
	 */
	private void setListViewHeightBasedOnItems(ListView listView) {
		ListAdapter listAdapter = listView.getAdapter(); // 获取适配器
		if (listAdapter == null) {
			return;
		}
		int count = listAdapter.getCount(); // item数量
		int totalHeight = 0;
		for (int i = 0; i < count; i++) {
			View item = listAdapter.getView(i, null, listView);
			item.measure(0, 0);
			int height = item.getMeasuredHeight();
			totalHeight += height;
			item = null;
		}
		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = totalHeight + (listView.getDividerHeight() * (count - 1)); // 计算ListView高度
		listView.setLayoutParams(params); // 设置ListView高度
	}


若listView各项等高,可不重新定义listView,直接在初始话listView 时计算高度,亦可实现相应的效果:

/**
	 * 动态设置ListView高度(各列表项等高)
	 * 
	 * @param listView
	 */
	private void setListViewHeightBasedOnItems2(ListView listView) {
		ListAdapter listAdapter = listView.getAdapter(); // 获取适配器
		if (listAdapter == null) {
			return;
		}
		int count = listAdapter.getCount(); // item数量
		View item0 = listAdapter.getView(0, null, listView); // 选取首个item
		item0.measure(0, 0);
		int itemHeight = item0.getMeasuredHeight(); // 获取首个列表项高度
		int dividerHeight = listView.getDividerHeight(); // 获取分割线高度
		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = (itemHeight + dividerHeight) * count - dividerHeight; // 计算ListView高度
		listView.setLayoutParams(params); // 设置ListView高度
	}


ScrollView嵌套ListView或GridView等,使得其高度自适应解决方案

这类的文章有很多,写此文的目的是为了备忘吧。ScrollView里面嵌套ListView或GridView等,两个View都有滚动的效果,在嵌套使用时起了冲突,一般不建议两者套用。解决的方案有很多但是...
  • wzgbgz
  • wzgbgz
  • 2017年07月31日 09:03
  • 455

解决GridView,ListView嵌套在ScrollView时只显示一行高度的问题

相信很多开发者碰到如题所示问题.         Gridview,ListView嵌套在ScrollView中,那么,你需要重写Gridview,ListView控件,不然Gridview,List...
  • scry5566
  • scry5566
  • 2015年11月04日 20:30
  • 1291

ScrollView嵌套GridView,自定义Gridview动态设置Item的高度,屏幕适配

GridView的Item动态改变高度,如图         图1 item高度相同       图2 Item部分高度比较大 出现这种情况,需要把所有的高度设置为相同,即为最大Item的高度 ...
  • tsdfk1455
  • tsdfk1455
  • 2014年01月08日 16:44
  • 1928

Android 6.0 解决Recyclerview 在 Scrollview 中不能高度自适应问题

Android 6.0 解决Recyclerview 在 Scrollview 中不能高度自适应问题在项目中遇到解决Recyclerview 在 Scrollview 中不能高度自适应问题...
  • xiaoxing0828
  • xiaoxing0828
  • 2016年10月17日 20:32
  • 3509

ListView或GridView与ScrollView共存,高度显示问题

自定义ListView(或GridView),重写里面的OnMeasure()方法重新计算高度 public class MyListView extends ListView { public...
  • YK_ing
  • YK_ing
  • 2013年08月29日 14:48
  • 1566

ListView(ScrollView)嵌套ListView、GridView显示不全,内容大于一行计算的高度不正确的解决办法

ListView(ScrollView)嵌套ListView、GridView显示不全,内容大于一行计算的高度不正确的解决办法...
  • smileiam
  • smileiam
  • 2016年01月13日 17:24
  • 1066

ListView中嵌套GridView关于GridView的高度显示问题

转载于: http://gundumw100.iteye.com/blog/1732987 经常要在ScrollView中嵌入ListView,网上方法一大堆,但都比较繁琐。  本人...
  • nnmmbb
  • nnmmbb
  • 2015年11月20日 18:02
  • 1403

Android GridView自适应高度(不出现滚动条)

最近有个需求就是,网格状显示,且需要自适应高度(不出现滚动条),大概看了一下网上的解决方法,最终采用了如下方案:   public class MyGridView extends GridView...
  • mengjiangyue
  • mengjiangyue
  • 2017年09月17日 10:13
  • 662

Android动态设定GridView的高度,固定column,实现高度自适应

动态设定GridView的高度,固定column,根据gridview中的item个数设定高度: 调用以下方法: [java] view plaincopy...
  • jdsjlzx
  • jdsjlzx
  • 2015年05月08日 17:32
  • 38502

解决 ScrollView 嵌套 ListView 时,高度不正常和滑动冲突的问题

我们在用ScrollView嵌套ListView会两个问题,一个问题是ListView高度不正常,另外一个问题是ListView无法滑动。下面我们就来看看这两个问题怎么解决吧。 第一个问题 Lis...
  • u010261933
  • u010261933
  • 2017年01月13日 15:52
  • 1121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ListView或GridView与ScrollView共存,高度显示问题
举报原因:
原因补充:

(最多只允许输入30个字)