zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用hugo在gitee上写blog
    golang初识2
    golang初识1
    install go on ubuntu
    sql优化的几种方式
    UpdatePanel 无刷新弹出窗口
    .net web 点击链接在页面指定位置显示DIV的问题
    重建主键
    sql 日期时间格式转换
    UpdatePanel无法直接弹出窗口的解决
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147265.html
Copyright © 2011-2022 走看看