创建一个简单的 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
的经验吗?
您可能不需要指定 LayoutParams。 GridLayout 应按您提供的顺序添加单元格(使用 grid.addView(...))。
另一个可能的问题是您的 square 视图对象。您应该确保返回的 View 对象设置了宽度和高度,并且视图中的 none 个子项(如果有)指定了可能填满您的屏幕的任何宽度或高度。
我正在尝试以编程方式在 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
的经验吗?
您可能不需要指定 LayoutParams。 GridLayout 应按您提供的顺序添加单元格(使用 grid.addView(...))。
另一个可能的问题是您的 square 视图对象。您应该确保返回的 View 对象设置了宽度和高度,并且视图中的 none 个子项(如果有)指定了可能填满您的屏幕的任何宽度或高度。