Я пытаюсь создать шахматную доску с кнопками 8х8. Я использую вложенные 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);