ScrollView嵌套GridView,GridView显示不全
2016-04-06 20:10
260 查看
在ScrollView里布局GridView时,GridView显示往往是以单行显示出来。这是由于GridView和ScrollView里都有滑动属性。
ScrollView无法判断GridView里的item高度是多少,于是只显示单个Item的高度,也就是单行显示了,剩下内容被隐藏了。
要解决的这个问题需要重新测量GridView的高度,下面是一个自定义的GridView控件
**在xml里布局该控件
然后在Java代码里调用
这里解释一下。
MeasureSpec代表着一组控件的宽高,MeasureSpec.makeMeasureSpec(int size,int mode)方法是根据提供的大小值和模式创建一个测量值(格式)。
在源代码里可以看到这个:
MeasureSpec.AT_MOST模式是返回Math.min(size, specSize)给其他函数,也就是返回Integer.MAX_VALUE >> 2和控件的之间的最小值。当我们正常使用不超过极限值时,返回的就是控件的大小。ScrollView收到GridView的大小,就给GridView全部展开显示了。
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全部展开显示了。
相关文章推荐
- ANDROID 中UID与PID的作用与区别
- 程序猿们,iOS中是有生命周期的
- 欢迎使用CSDN-markdown编辑器
- Java线程池解析
- 团队成员及题目
- 字符串与文件的相互转换(java)
- 电子书7
- HDU 1003 max sum
- Genymotion填坑之路
- 彻底删除MySQL及恢复MySQL数据
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- 基数排序
- hdu 【1698】 Just a Hook
- Android textView高度为0的解决方法
- RandomAccessFile
- 【bzoj3609】[Heoi2014]人人尽说江南好
- 多线程40个问题汇总
- 电子书9
- JavaScript语言精粹——特性
- 电子书10