展会信息港展会大全

ScrollView中嵌套ListView、GridView方法总结
来源:互联网   发布日期:2015-11-26 11:20:46   浏览:1714次  

导读:ScrollView中嵌套ListView、 GridView,ListView、GridView都显示不全,网上有很多解决办法,本菜鸟学习后,总结了一下,望轻喷。。。。首先ListView,一般有两种解决办法,方法一:重新计算出ListView的高度, ...

ScrollView中嵌套ListView、 GridView,ListView、GridView都显示不全,网上有很多解决办法,本菜鸟学习后,总结了一下,望轻喷。。。。

首先ListView,一般有两种解决办法,

方法一:重新计算出ListView的高度,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import android.view.View;

import android.view.ViewGroup;

import android.widget.ListAdapter;

import android.widget.ListView;

public class ListViewUtility {

public static void setListViewHeightBasedOnChildren(ListView listView) {

//获取ListView对应的Adapter

ListAdapter listAdapter = listView.getAdapter();

if (listAdapter == null) {

return;

}

int totalHeight = 0;

for (int i = 0, len = listAdapter.getCount(); i < len; i++) {//listAdapter.getCount()返回数据项的数目

View listItem = listAdapter.getView(i, null, listView);

listItem.measure(0, 0);//计算子项View 的宽高

totalHeight += listItem.getMeasuredHeight();//统计所有子项的总高度

}

ViewGroup.LayoutParams params = listView.getLayoutParams();

params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

//listView.getDividerHeight()获取子项间分隔符占用的高度

//params.height最后得到整个ListView完整显示需要的高度

listView.setLayoutParams(params);

}

}

调用ListView此类的静态方法就OK了

此方法有很大的缺陷,要求ListView的子项必须是线型布局,所以不实用。

方法二:重写ListView的onMeasure方法代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import android.content.Context;

import android.util.AttributeSet;

import android.view.View.MeasureSpec;

import android.widget.ListView;

public class MyListView extends ListView{

public MyListView(Context context) {

super(context);

// TODO Auto-generated constructor stub

}

public MyListView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

public MyListView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

int expandSpec = MeasureSpec.makeMeasureSpec(

Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

}

华丽丽的分割线

GridView也是重写onMeasure方法好用贴出代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import android.content.Context;

import android.util.AttributeSet;

import android.widget.GridView;

public class MyGridView extends GridView {

public MyGridView(Context context) {

super(context);

// TODO Auto-generated constructor stub

}

public MyGridView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

public MyGridView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

}

其实重写ListView和GridView的代码一样,暂时没有具体研究是怎么实现的,希望大神解 答。

赞助本站

人工智能实验室

相关热词: ScrollView 嵌套 ListView GridVie

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港