前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全。

解决办法,自定义一个GridView控件

  1. public class MyGridView extends GridView {
  2. public MyGridView(Context context, AttributeSet attrs) {
  3. super(context, attrs);
  4. }
  5. public MyGridView(Context context) {
  6. super(context);
  7. }
  8. public MyGridView(Context context, AttributeSet attrs, int defStyle) {
  9. super(context, attrs, defStyle);
  10. }
  11. @Override
  12. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  13. int expandSpec = MeasureSpec.makeMeasureSpec(
  14. Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  15. super.onMeasure(widthMeasureSpec, expandSpec);
  16. }
  17. }

该自定义控件只是重写了GridView的onMeasure方法,使其不会出现滚动条,ScrollView嵌套ListView也是同样的道理,不再赘述。

XML布局代码

  1. <ScrollView Android:layout_height="wrap_content"
  2. Android:layout_width="fill_parent" android:id="@+id/scroll_content">
  3. <com.yourclass.MyGridView xmlns:Android="http://schemas.android.com/apk/res/android"
  4. Android:id="@+id/grid_view" android:layout_width="fill_parent"
  5. Android:layout_height="wrap_content" android:numColumns="auto_fit"
  6. Android:horizontalSpacing="1dip" android:verticalSpacing="1dip"
  7. Android:columnWidth="150dip" android:stretchMode="columnWidth"
  8. Android:gravity="center">
  9. </com.yourclass.MyGridView>
  10. </ScrollView>

Java调用代码

  1. MyGridView gridview = (MyGridView) findViewById(R.id.grid_view);
  2. gridview.setAdapter(new ImageAdapter(this));

========================

1.使用网上用的动态改变listview高度的方法,该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。所以使用限制较大。

  1. public class Utility {
  2. public static void setListViewHeightBasedOnChildren(ListView listView) {
  3. //获取ListView对应的Adapter
  4. ListAdapter listAdapter = listView.getAdapter();
  5. if (listAdapter == null) {
  6. // pre-condition
  7. return;
  8. }
  9. int totalHeight = 0;
  10. for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目
  11. View listItem = listAdapter.getView(i, null, listView);
  12. listItem.measure(0, 0); //计算子项View 的宽高
  13. totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度
  14. }
  15. ViewGroup.LayoutParams params = listView.getLayoutParams();
  16. params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
  17. //listView.getDividerHeight()获取子项间分隔符占用的高度
  18. //params.height最后得到整个ListView完整显示需要的高度
  19. listView.setLayoutParams(params);
  20. }
  21. }

2.网上有帖子说在ScrollView中添加一属性 android:fillViewport="true" ,这样就可以让ListView全屏显示了。在我机器上测试失败了。

3.重写ListView、gridView(推荐):

重写ListView

  1. public class MyListView extends ListView {
  2. public MyListView(Context context) {
  3. // TODO Auto-generated method stub
  4. super(context);
  5. }
  6. public MyListView(Context context, AttributeSet attrs) {
  7. // TODO Auto-generated method stub
  8. super(context, attrs);
  9. }
  10. public MyListView(Context context, AttributeSet attrs, int defStyle) {
  11. // TODO Auto-generated method stub
  12. super(context, attrs, defStyle);
  13. }
  14. @Override
  15. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  16. // TODO Auto-generated method stub
  17. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
  18. MeasureSpec.AT_MOST);
  19. super.onMeasure(widthMeasureSpec, expandSpec);
  20. }
  21. }

同样适用与重写GridView

  1. /**
  2. * 自定义gridview,解决ListView中嵌套gridview显示不正常的问题(1行半)
  3. * @author wangyx
  4. * @version 1.0.0 2012-9-14
  5. */
  6. public class MyGridView extends GridView{
  7. public MyGridView(Context context, AttributeSet attrs) {
  8. super(context, attrs);
  9. }
  10. public MyGridView(Context context) {
  11. super(context);
  12. }
  13. public MyGridView(Context context, AttributeSet attrs, int defStyle) {
  14. super(context, attrs, defStyle);
  15. }
  16. @Override
  17. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  18. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
  19. MeasureSpec.AT_MOST);
  20. super.onMeasure(widthMeasureSpec, expandSpec);
  21. }
  22. }

ScrollView--嵌套GridView的解决办法的更多相关文章

  1. Android开发:ScrollView嵌套GridView的解决办法

    Android开发:ScrollView嵌套GridView的解决办法   前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便 ...

  2. Android中ScrollView嵌套GridView,解决GridView显示不全的问题

    /** * 自定义gridview,解决ScrollView中嵌套gridview显示不正常的问题(1行半) * */ public class MyGridView extends GridView ...

  3. 【问题汇总】ScrollView嵌套GridView的问题

    在开发中遇到了ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当它们碰到一起的时候便会出问题,即GridView会显示不全. 解决办法,自定义一个GridView控件. [ ...

  4. Android开发随笔之ScrollView嵌套GridView[ 转]

    今天在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全,为了解决这个问题查了N多资料,某个谷歌的 ...

  5. scrollview嵌套gridview滑动问题

    在开发过程总遇到ScrollView嵌套GridView,由于这两种控件都带有滚动条,当他们碰到一起的时候便会出问题,问题是gridview不滚动,并且只显示两行,为此看了官方文档,谷歌回答滚动里面没 ...

  6. 阻尼回弹效果的ScrollView嵌套GridView

    以前写过一篇带阻尼回弹效果的ScrollView,但是有些小问题,于是又重新整理了一下,这篇文章一是一个带阻尼的Scrollview,再个就是Scrollview嵌套GridView实现,而GridV ...

  7. Android ScrollView嵌套GridView导致GridView只显示一行item

    Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...

  8. 在ScrollView嵌套GridView,使GridView不滚动

    <ScrollView>       ……   <LinearLayout> </LinearLayout>       ……</ScrollView> ...

  9. ScrollView嵌套GridView,GridView显示不全

    最近开发有个需求是以A-Z的方式区分全国城市(搜索功能),并实现字母索引的功能(有点类似微信,不过比较坑的是用的是GridView, 并且GridView上面还有几个LinearLayout). 详细 ...

随机推荐

  1. 磁盘与目录的容量[转自vbird]

    磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...

  2. 【转】完美解除Windows7的驱动程序强制签名限制

    原文网址:http://nick.txtcc.com/index.php/nocategory/290 Windows 7很J,很多驱动程序都无法安装,因为Windows 7不像Vista,必须要求所 ...

  3. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  4. Uinty3d 镜面反射代码

    镜面反射代码 文件名MirrorReflection.cs 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 2 ...

  5. PostgreSQL: Query for location of global tablespace?

    Q: I have been trying to make our database clients pro-active about not filling up the partition on ...

  6. 用CorelDRAW勾画对象轮廓图的方法

    轮廓图效果是利用渐变的步数来使图形产生渐变效果,与调和效果相似.两者的区别在于图形数不同,调和效果作用于两个或两个以上的图形,轮廓图只作用于一个图形.本教程将详解CorelDRAW中如何勾画对象轮廓图 ...

  7. Web前端开发笔试&面试_03

    WL: 1.如何显示.隐藏一个dom对象? 2.如何将一个网页中的内容水平置中?写出重要的html标签和css. (css:#content{align:center;float:left;}html ...

  8. 虚拟化之vmware-vsphere概念,原理,功能

    080-login-back.vmx .encoding = "UTF-8"config.version = "8"virtualHW.version = &q ...

  9. DBA常用SQL之DDL生成语句

    获取对象定义的包为:dbms_metadata,其中的get_ddl函数是获取对象的函数 GET_DDL函数返回创建对象的原数据的DDL语句,参数说明 .object_type ---需要返回原数据的 ...

  10. label 与 input

    <form onsubmit="return checkform()" > <div style=" width:100%; border:0px #0 ...