Android: удалить отступы от линейного размещения, чтобы создать квадратный макет - PullRequest
0 голосов
/ 04 января 2011

Я пытаюсь создать шахматную доску с кнопками 8х8. Я использую вложенные LinearLayouts. Проблема в том, что между каждой строкой ImageViews есть отступы, от которых я не могу избавиться. Это то, что у меня есть софар, доска должна быть квадратной, но не такой:

alt text

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);

Ответы [ 2 ]

1 голос
/ 04 января 2011

TableLayout

Обзор класса

макет, который устраивает своих детей на строки и столбцы. TableLayout состоит из ряда TableRow объекты, каждый из которых определяет строку (на самом деле, вы можете иметь другие дети, которые будут объяснены ниже). Контейнеры TableLayout не отображать граничные линии для их строк, столбцы или ячейки.

0 голосов
/ 04 января 2011

Вам лучше использовать GridView или TableLayout вместо вложенных LinearLayouts, поскольку именно для этого они и предназначены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...