我有一个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的错误吗?
答案 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
中定义的相同