滚动向左时,GridLayout不完全可见

时间:2014-03-03 19:03:57

标签: android scrollview grid-layout

我正在尝试“扫雷”。基本上我在GridLayoutScrollView内有HorizontalScrollView。如果所有字段都在屏幕上(在我的情况下为ImageButtons),一切都OK。但如果我放大(增加ImageButtons的大小),HorizontalScrollView只能部分工作。

看看这张照片: enter image description here

我放大了更多字段隐藏在左侧,更多可用空间位于右侧。

XML布局:

<ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

    <HorizontalScrollView
        android:id="@+id/horizontalScrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <GridLayout
            android:id="@+id/grid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center" >

        </GridLayout>

    </HorizontalScrollView>

</ScrollView>

以及如何动态地向GridLayout添加按钮:

field = (GridLayout) findViewById(R.id.grid);
        field.setColumnCount(N);
        field.setRowCount(N);


        for(int i = 0; i < N; i++){
            for(int j = 0; j < N; j++){
                ImageButton b = new ImageButton(this);
                b.setId(j*10+i);
                b.setImageResource(R.drawable.unknowen);
                b.setTag(R.drawable.unknowen);
                b.setScaleType(ImageView.ScaleType.CENTER_CROP);
                b.setPadding(5,5,5,5);

                GridLayout.LayoutParams params = new GridLayout.LayoutParams();
                params.setMargins(-7,-7,-7,-7);
                params.width = fieldSize;
                params.height = fieldSize;

                b.setOnClickListener(this);
                b.setOnLongClickListener(this);
                field.addView(b, params);
            }
        }

我为糟糕的语言道歉,并感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

首先,我非常确定在Horizo​​ntalScrollView(也实现滚动侦听)中嵌套GridView(实现滚动侦听)不太可能按预期工作。

但是,如果你只进行水平滚动,你可能只想将android:scrollbars =“horizo​​ntal”添加到GridView并完全摆脱Horizo​​ntalScrollView(但我不确定你是否还需要垂直滚动,这会导致这个答案产生更多问题。)

对于向GridView添加数据,您应该更改GridView适配器所支持的对象的LIST中的数据;不是实际的View本身。 GridView中的视图是根据需要由Adapter生成的,并通过将View中的位置映射到数据集中的位置,填充在Adapter的覆盖getView()方法中。

另请注意,在更改数据集之后,您必须始终在适配器上调用notifyDataSetChanged(),以便使用更新的结果刷新其View。