本文系原创,转载请附原文地址:http://blog.csdn.net/a774057695/article/details/48262275 谢谢
前言:
一般而言,当“条目类”的东西过多时,使用listview就不合适了,(请允许我用条目类这样一个词来形容,我想表达的就是:类型基本相似,蕴含内容不多的一系列数据,例如说做书架的时候),仍然用书架举例,产品、设计会更倾向于做成table类型(就像android的桌面一样)而不是列表类型。这时候我们选用girdview就可以了。
然而,(哪怕没有产品、设计师来给你做原型设计)你自己也不会光秃秃的弄一个girdview放在那里孤零零的,一定会放其他的widget。当数据较少时,你不会感觉到什么,当数据多了一些之后,girdview不能一次性全部显示了。我们发现girdview是可以滚动的,但是这种体验很差,我们更希望的是布局的主体(去掉状态栏,toolbar,固定的底部栏以外的部分)一起滚动(当然,girdview是展开的咯)
我们最先想到的就是在外层套一个scrollview,稍微有点经验的都会知道,具有scroll的容器包含具有同向scroll的视图时会出问题。
我们暂且不管为什么出问题,先解决这个问题好吧,关于出问题的原因和以下解决方法有效的原因,我们以后有空再分析、分享。
正文:
问题由来就是系统在测量scrollview和girdview的时候冲突了,我们是希望girdview展开的,没必要在让gridview再去测算滑动位置,显示多少内容,没有必要。(当然咯,也只能动girdview,动了scrollview你还怎么滑。。。)
我们重写GridView,关键是重写: onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法
新建一个类MyGirdView,假定在包:a.b.c中
<span style="font-size:18px;">/** * this file is in a.b.c * author:leobert.lan * time:2015年9月7日 上午9:55:13 * desc: */ package com.freerdp.freerdpcore; import android.content.Context; import android.util.AttributeSet; import android.widget.GridView; /** * @author leobert.lan * @date 2015年9月7日 */ public class MyGridView extends GridView { public MyGridView(Context paramContext) { super(paramContext); } public MyGridView(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); } 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, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }</span>这些代码我就不同大家讨论了。等下次解析问题由来的时候再说。
在我们要使用的地方:(布局文件咯)
<span style="font-size:14px;"><span style="font-family:微软雅黑;"><!-- 注意你的包名,属性呢我只是顺手写了点,不是说要用就必须这样,ok?--></span> <span style="font-family: 微软雅黑;"><a.b.c.MyGridView </span><span style="font-family: 微软雅黑;"> android:id="@+id/ididididid" </span></span><pre name="code" class="html" style="color: rgb(34, 34, 34); line-height: 24px; font-family: 微软雅黑;"><span style="font-size:14px;"><span style="white-space: pre;"> </span>android:layout_width="match_parent" android:layout_height="wrap_content" android:columnWidth="80dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" > </a.b.c.MyGridView></span>
在相应的activity类文件中声明一个实例的时候请注意,是MyGirdView,不是GirdView了。例如:
<span style="font-size:18px;">// 声明一个实例 private MyGirdView mGirdView //绑定对象的时候注意你的cast</span>
这种方法就是scrollview中包含多个MyGirdView也不会有问题。
今天就到这里,继续工作了。
本文系原创,转载请附原文地址:http://blog.csdn.net/a774057695/article/details/48262275 谢谢