禁用gridview滚动

时间:2012-11-25 19:06:05

标签: android gridview scroll

我的布局有expandablelistview。并且,每个子项目都有gridview。但是gridview有自己的滚动和expandablelistview也有。所以我必须为所有gridview设置固定长度,但有动态的网格视图数。

我从here找到了单个gridview的解决方案。

private OnGlobalLayoutListener mOnGlobalLayoutGridListener = new OnGlobalLayoutListener() {

    @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {

        Debug.e("", "onGlobalLayout is called");

        if (gridView != null && gridView.getChildCount() > 0) {

            gridView.getViewTreeObserver().removeGlobalOnLayoutListener(
                    this);

            // gridView.get

            View lastChild = gridView
                    .getChildAt(gridView.getChildCount() - 1);

            int rows = gridView.getAdapter().getCount() / numColumns;
            int extra = gridView.getAdapter().getCount() % numColumns;

            if (extra > 0) {
                rows++;
            }

            int height = (int) (lastChild.getMeasuredHeight() * rows);

            gridView.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, height));
        }

    }
};

OnGlobalLayoutListener未引用特定的Gridview。所以我不能将这个监听器用于所有的网格视图,因为所有的网格视图都有不同数量的项目。

见这里

enter image description here

谁能帮助我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用这样的自定义GridView,然后您不必为所有gridview设置修复长度:

公共类GridlistView扩展了GridView {

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


public void  onMeasure(int widthMeasureSpec,int heightMeasureSpec) {
    int expendSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expendSpec);
}

}

在xml中使用Gridlistview;