我是Android开发新手,所以我一直在研究一个国际象棋应用程序,以教我自己。但是,我现在卡住了。从本质上讲,我需要一个很好的方式提请ImageButtons的8X8格这样的:如何以编程方式使用ImageButton填充网格?
- 按钮填满整个电网
- 格栅间距的按钮中均匀分布
- 有按键之间没有缝隙(澄清#2)
- 网格是方形的,它的大小可以控制(我希望能够根据屏幕大小自动调整大小)。
或者,简单地说,它应该看起来像一个标准的国际象棋棋盘:)
我试过几个布局没有成功。目前,这是我已经能够做到最好:
我使用PlayGameActivity内的下列方式(如果董事会应当制定)一个网格布局:
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设计方法)。
由于我一直试图让程序化解决方案发挥作用,所以我只想解决XML解决方案。在这种情况下,董事会中的广场数量不会改变,因此追求其他解决方案没有多少理由。但是,在棋盘上,每个相邻的方格都是相反的颜色。我看到如何用你的方法创建一个图像按钮的网格,但是有什么方法可以在事后不改变颜色(即访问行中的每一行和每个方块来改变颜色)? – TheRussianPatzer
我刚刚用我的建议编辑了我的答案。往上看。 – windedmoose
我终于开始实施该解决方案的XML版本,并且它工作的很棒!这不是我原本以为我想要的解决方案,但实际上结果非常好。如果你按照你的建议将事情分解成碎片,XML是一种很好的做事方式,所以谢谢! – TheRussianPatzer