以编程方式更改时,Android GridLayout跨行为不同

时间:2016-02-20 09:42:15

标签: android html

我有一个XML GridLayout,其中一个单元格应跨越两个单元格,而不会影响网格中的其他单元格。我可以使用此设置在XML布局文件中执行此操作

<!-- ROW ONE -->
<include layout= "@layout/tile"
    android:id="@+id/tile11"
    grid:layout_row="0"
    grid:layout_column="0"
    grid:layout_columnWeight="1"
    grid:layout_rowWeight="1"
    grid:layout_gravity="fill"/>
<include layout= "@layout/tile"
    android:id="@+id/tile12"
    grid:layout_row="0"
    grid:layout_column="1"
    grid:layout_columnSpan="2"
    grid:layout_columnWeight="1"
    grid:layout_rowWeight="1"
    grid:layout_gravity="fill"/>
<include layout= "@layout/tile"
    android:id="@+id/tile14"
    grid:layout_row="0"
    grid:layout_column="3"
    grid:layout_columnWeight="1"
    grid:layout_rowWeight="1"
    grid:layout_gravity="fill"/>

这就是它的外观和样子 GridLayout from XML

但我想在代码中动态更改单元格的排列。这就是我尝试以编程方式获得相同结果的方式:

        tile = (FrameLayout) gridLayout.findViewById(R.id.tile12);
    ((GridLayout.LayoutParams) tile.getLayoutParams()).columnSpec =
            GridLayout.spec(GridLayout.UNDEFINED, 2f);

但行为是完全不同的..它弄乱了我的布局,它看起来像这样(所有第二列都受到影响而且有点宽,第一行中的第三个单元格只是空白而不是被第二行覆盖):

GridLayout changed programmatically

我发生了什么问题或者这是GridLayout的错误吗?

1 个答案:

答案 0 :(得分:0)

好的......我自己找到了解决方案...... 必须使用这种方法:

static GridLayout.Spec  spec(int start, int size, float weight)

代替..所以代码看起来像

tile = (FrameLayout) gridLayout.findViewById(R.id.tile12);
((GridLayout.LayoutParams) tile.getLayoutParams()).columnSpec =
        GridLayout.spec(GridLayout.UNDEFINED, 2, 2f);

并且行为与XML Layout

中定义的相同