ScrollView嵌套GridView,GridView显示不全

来源:互联网 发布:java时间轴代码 编辑:程序博客网 时间:2024/05/16 14:59

在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"      //......这里不再赘述了,自己自行定义     />  

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全部展开显示了。

感谢:

原文链接:http://blog.csdn.net/loongago/article/details/51078031  仅供个人学习使用。如侵犯了您的利益,请联系作者删除:Q337081267



阅读全文
0 0
原创粉丝点击