Android ScrollView嵌套GridView导致GridView只显示一行item

Android ScrollView嵌套GridView导致GridView只显示一行item

Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显示一行。比如,在一个大的根ScrollView里面套一个根、大的垂直线性布局,此线性布局里面有若干子View,GridView只是其中之一,那么当这个大xml写成的布局在初始化加载后,GridView只显示一行,这种情况是因为在Android的体系设计中,由于ScrollView和GridView本身都是滚动View导致互相冲突引起。
在上述开发情景中,如果打算完全展开GridView,其中一个解决方案就是继承GridView加以改造重写GridView,然后使用这个重写的这个GridView:

package zhangphil.sample.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.GridView;

/**
 * Created by Phil on 2016/8/18.
 */
public class ExpandableGridView extends GridView {

    boolean expanded = true;

    public boolean isExpanded() {
        return expanded;
    }

    public ExpandableGridView(Context context) {
        super(context);
    }

    public ExpandableGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ExpandableGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (isExpanded()) {
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
            ViewGroup.LayoutParams params = getLayoutParams();
            params.height = getMeasuredHeight();
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

    public void setExpanded(boolean expanded) {
        this.expanded = expanded;
    }
}



在这个重写改造后的GridView里面增加了判断是否完全伸展开的状态值,可以set是否完全伸展。
如果expanded为true,那么初始化加载后就完全展开这个GridView的所有子item;
如果expanded为false,那么就退化成Android原生的GridView只显示一行。
根据自己项目的实际开发场景设置expanded的初始值为true或false,通常在开发中是希望GrdiView完全展开的,那就直接用我写好的代码就可以了。
不仅ScrollView在嵌套GridView时候会引起GridView不能展开只显示一行,实际上当ListView与GridView嵌套时候,也会引起这个问题,解决方案之一还是用我的这个重写后的GridView而非Android系统原生的GridView。


附录:
1,《Android GridView子元素item按击交互设计:背景颜色改变》链接:http://blog.csdn.net/zhangphil/article/details/46048583

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/615934

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。