android scrollview嵌套girdview显示效果不理想的问题解决

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





你可能感兴趣的:(android,scrollview,GirdView,girdview显示)