本文系原创,转载请附原文地址: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 谢谢