我正在尝试用8x8按钮创建一个国际象棋游戏板。我正在使用嵌套的LinearLayouts。问题是ImageViews的每一行之间都有一个填充,我无法摆脱它。这就是我所熟悉的,董事会应该是正方形,但不是:
public class BoardLayout extends LinearLayout {
public BoardLayout(Context context) {
super(context);
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
setLayoutParams(parms);
setOrientation(LinearLayout.VERTICAL);
setPadding(0, 0, 0, 0);
for (int i = 0; i < 8; i++) {
LinearLayout row = new LinearLayout(context);
row.setLayoutParams(parms);
row.setOrientation(LinearLayout.HORIZONTAL);
row.setPadding(0, 0, 0, 0);
for (int j = 0; j < 8; j++) {
ImageView button = new ImageView(context);
button.setLayoutParams(parms);
button.setImageResource(R.drawable.icon);
button.setAdjustViewBounds(true);
button.setPadding(0, 0, 0, 0);
row.addView(button);
}
addView(row);
}
setSquare();
}
public void setSquare() {
int size = Math.min(getWidth(), getHeight());
// setHeight(size); // Not Function, but this is what I need
// setWidth(size); // Not Function, but this is what I need
// also doesn't work
setLayoutParams(new LinearLayout.LayoutParams(size, size, 1.0f));
}
}
解决方案:
正如所建议的,TableLayout更适合我正在尝试做的事情。所以主类应该改为TableLayout,嵌套的LinearLayouts改为TableRows。
但仅此一项并未修复,我还必须在TableLayout中调用以下内容:
setShrinkAllColumns(true);
setStretchAllColumns(true);
并且对于插入的每个项目,我还必须致电:
setAdjustViewBounds(true);
答案 0 :(得分:1)
课程概述
布置其子项的布局 成行和列。一个TableLayout 由许多TableRow组成 对象,每个对象定义一行 (实际上,你可以拥有其他的 孩子们,这将被解释 下面)。 TableLayout容器没有 显示行的边框线, 列或单元格。
答案 1 :(得分:0)
最好使用GridView或TableLayout而不是嵌套的LinearLayouts,因为这是他们的设计目标。