创建一个简单的 GridLayout 不起作用

Creating a simple GridLayout not working

我正在尝试以编程方式在 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 的经验吗?

您可能不需要指定 LayoutParamsGridLayout 应按您提供的顺序添加单元格(使用 grid.addView(...))。

另一个可能的问题是您的 square 视图对象。您应该确保返回的 View 对象设置了宽度和高度,并且视图中的 none 个子项(如果有)指定了可能填满您的屏幕的任何宽度或高度。