关闭

ScrollView嵌套GridView,GridView显示不全

6302人阅读 评论(4) 收藏 举报
分类:

在ScrollView里布局GridView时,GridView显示往往是以单行显示出来。这是由于GridView和ScrollView里都有滑动属性。

ScrollView无法判断GridView里的item高度是多少,于是只显示单个Item的高度,也就是单行显示了,剩下内容被隐藏了。

要解决的这个问题需要重新测量GridView的高度,下面是一个自定义的GridView控件

public class MyGridView extends GridView {
    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context) {
        super(context);
    }

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

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

**xml里布局该控件

<com.yourclass.MyGridView 
    android:id="@+id/gridView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    //......这里不再赘述了,自己自行定义
   />

然后在Java代码里调用

    MyGridView gridview = (MyGridView) findViewById(R.id.grid_view);  


这里解释一下。

MeasureSpec代表着一组控件的宽高,MeasureSpec.makeMeasureSpec(int size,int mode)方法是根据提供的大小值和模式创建一个测量值(格式)。

在源代码里可以看到这个:

public static int resolveSize(int size, int measureSpec) {  
         int result = size;  
         int specMode = MeasureSpec.getMode(measureSpec);  
         int specSize =  MeasureSpec.getSize(measureSpec);  
         switch (specMode) {  
         case MeasureSpec.UNSPECIFIED:  
             result = size;  
             break;  
         case MeasureSpec.AT_MOST:  
             result = Math.min(size, specSize);  
             break;  
         case MeasureSpec.EXACTLY:  
             result = specSize;  
             break;  
         }  
         return result;  
     } 

MeasureSpec.AT_MOST模式是返回Math.min(size, specSize)给其他函数,也就是返回Integer.MAX_VALUE >> 2和控件的之间的最小值。当我们正常使用不超过极限值时,返回的就是控件的大小。ScrollView收到GridView的大小,就给GridView全部展开显示了。


3
2
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ScrollView嵌套ListView、GridView,进入页面显示的位置并不是在最顶部,而是在中间部分问题

在Android项目的开发中,经常会遇到一些布局,可能需要在ScrollView中嵌套ListView或、GridView来实现,当然我们都知道ScroView中嵌套ListView、GridView...
  • mq2856992713
  • mq2856992713
  • 2016-12-18 18:02
  • 1269

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)

一.使用网上用的动态改变listview高度的方法,该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onM...
  • cs_li1126
  • cs_li1126
  • 2013-10-21 11:17
  • 11362

笔记12--GridView--且解决与ScrollView共用的冲突问题

GridView用法基本逻辑:1)要加载到GridView的数据2)将数据放入适配器3)
  • mwj_88
  • mwj_88
  • 2014-04-07 11:40
  • 18850

ScrollView中嵌套 GridView 导致 ScrollView默认不停留在顶部的解决办法

ScrollView中嵌套 GridView 导致 ScrollView默认不停留在顶部的解决方案和分析 发生情况大概是我在ScrollView底部放了个GridView 来实现一个类似9宫格效果的...
  • DJS168888
  • DJS168888
  • 2015-11-05 17:09
  • 924

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

public class MyGridView extends GridView{       public MyGridView(Context context, AttributeSet...
  • qq_41138470
  • qq_41138470
  • 2017-12-30 11:44
  • 9

Android开发之ScrollView中嵌套ListView的解决方案

在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全。我试过很多种方法,它们各有利弊。    在这里我将会从使用ScrollView嵌套Lis...
  • c_furong
  • c_furong
  • 2017-12-28 11:24
  • 87

ScrollView嵌套使用GridView 两个都可以滚动

最近在做项目是遇到了需求,就是一个界面为了考虑屏幕小的手机,界面上的布局需要使用ScrollView ,但是页面有一个供用户选择的地址,需要使用GridView,以九宫格的形式将地址列出供用户选择,于...
  • hj363049394
  • hj363049394
  • 2014-11-30 21:44
  • 2138

ScrollView中嵌套GridView,ListView只显示一行的解决办法

关于为什么只显示一行,个人理解是
  • luohai859
  • luohai859
  • 2014-09-17 20:43
  • 9005

ScrollView嵌套GridView不能滚动的问题解决方案

  • 2013-10-22 10:02
  • 17KB
  • 下载

Android开发随笔之ScrollView嵌套GridView

在开发过程总遇到ScrollView嵌套GridView,由于这两种控件都带有滚动条,当他们碰到一起的时候便会出问题,问题是gridview不滚动,并且只显示两行,为此看了官方文档,谷歌回答滚动里面没...
  • lonely_fireworks
  • lonely_fireworks
  • 2012-02-08 15:23
  • 27517
    个人资料
    • 访问:36469次
    • 积分:681
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    最新评论