我是 Android 开发的新手,所以我一直在开发一个国际象棋应用程序来自学。但是,我现在卡住了。本质上,我需要一个好方法来绘制一个 8x8 的 ImageButtons 网格,这样:
- 按钮填满整个网格
- 网格空间在按钮之间均匀分布
- 按钮之间没有间隙(澄清#2)
- 网格是方形的,它的大小可以控制(我希望能够根据屏幕大小自动调整大小)。
或者,简单地说,它应该看起来像一个标准的棋盘:)
我尝试了几种布局都没有成功。目前,这是我能做到的最好的:
我在 PlayGameActivity 中以下列方式使用 GridLayout (应该在哪里绘制棋盘):
public void onStart(){
super.onStart();
board = (GridLayout)findViewById(R.id.chessboard);
board.setColumnCount(8);
board.setRowCount(8);
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
ImageButton square = squares[i][j] = new ImageButton(this);
GridLayout.LayoutParams params = new GridLayout.LayoutParams();
params.rightMargin = 0;
params.topMargin = 0;
params.height = params.WRAP_CONTENT;
params.width = params.WRAP_CONTENT;
params.setGravity(Gravity.FILL);
params.rowSpec = GridLayout.spec(i);
params.columnSpec = GridLayout.spec(j);
board.addView(square, params);
//board.addView(square);
}
}}
棋盘是通过 XML 定义的,如下所示:
<GridLayout
android:id="@+id/chessboard"
android:layout_width="353dp"
android:layout_height="353dp"
android:layout_marginBottom="104dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="104dp"
android:background="#000000"
android:gravity="center_horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_constraintBottom_creator="1"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1"
tools:layout_constraintTop_creator="1">
</GridLayout>
我为此类问题找到的所有解决方案都采用 Android XML 的形式。也许我对这种方法的担忧是基于无知,但我的理解是我必须将 64 个正方形复制并粘贴到 GridLayout 或其他东西中。另外,我不确定如何使用这种方法根据屏幕尺寸调整大小。理想情况下,我正在寻找一个严格的程序化解决方案(无论如何这是我首选的 UI 设计方法)。