我尝试以编程方式在android中创建一个简单的网格布局。它将具有一定数量的行和列,并且每个方块的颜色不同。我试过的似乎是为每个方块着色最后一个视图的值(我相信),但我不太清楚为什么。 GridLayout
似乎没有非常清晰的文档。这是我的代码:
public static final int GAME_BOARD_COLUMNS = 8;
public static final int GAME_BOARD_ROWS = 8;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_game_board, container, false);
createGameBoard(view);
return view;
}
private void createGameBoard(View view) {
GridLayout grid = (GridLayout)view.findViewById(R.id.grid_layout_game_board);
grid.setRowCount(GAME_BOARD_ROWS);
grid.setColumnCount(GAME_BOARD_COLUMNS);
for (int i = 0; i < GAME_BOARD_ROWS; i++) {
for (int j = 0; j < GAME_BOARD_COLUMNS; j++) {
GridLayout.LayoutParams params =
new GridLayout.LayoutParams(GridLayout.spec(i), GridLayout.spec(j));
View square = new View(getActivity());
int color = Color.rgb(
(int) ((255.0f / (float) GAME_BOARD_ROWS) * i),
(int) ((255.0f / (float) GAME_BOARD_COLUMNS) * j),
100);
square.setBackgroundColor(color);
grid.addView(square, params);
}
}
}
游戏板布局非常简单:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_layout_game_board"
android:layout_width="match_parent"
android:layout_height="match_parent">
</GridLayout>
当我运行它时,我的屏幕只是蓝色,无法弄清楚原因,虽然每次迭代调试颜色都不同,所以我猜测它并没有真正添加视图到GridLayout
正确。任何人都有过如何以编程方式正确填充GridLayout
的经验吗?
答案 0 :(得分:1)
您可能不需要指定 LayoutParams 。 GridLayout 应该在您提供时按顺序添加单元格(使用 grid.addView(...))。
另一个可能的问题是您的 square View对象。您应该确保返回的View对象设置了宽度和高度,并且视图中没有任何子项(如果有)具有指定可能填满屏幕的任何宽度或高度。