Как мне добиться квадратного расположения и кнопок в main.xml? - PullRequest
2 голосов
/ 30 октября 2010

Я хотел бы иметь макет с 5 раз 5 кнопок. Каждый из них должен иметь одинаковую ширину и высоту (они должны быть квадратными). И я хочу, чтобы вся матрица использовала ширину экрана (или высоту, в зависимости от поворота).

В настоящее время я делаю это "вручную" в коде Java:

for (int y=0; y<5; y++) {
    TableRow tr = new TableRow(this);
    for (int x=0; x<5; x++) {
        Button b = new Button (this);
        ...
        tr.addView(b, 60, 60);
    }
    layout.addView(tr);
}

Это можно улучшить, получив сначала ширину экрана, а затем разделив ее на 5, чтобы избавиться от этого литерала 60. Но мне интересно, как мне это сделать в XML-файле res / layout?

Как я могу указать, чтобы высота равнялась ширине? (Я могу установить ширину для match_parent.)

Ответы [ 4 ]

2 голосов
/ 31 октября 2010

Лучше всего делать это в качестве собственного менеджера макета. Подкласс от ViewGroup и реализовать нужный код макета. Реализовать собственный менеджер макетов довольно просто, если вы пытаетесь использовать алгоритм компоновки общего назначения (которым вы не являетесь).
Посмотрите, например, AbsoluteLayout платформы в качестве примера простого менеджера компоновки: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/AbsoluteLayout.java

0 голосов
/ 21 ноября 2010

Использовать таблицы ... таким образом все кнопки имеют одинаковую ширинуВы можете изменить высоту соответственно

0 голосов
/ 31 октября 2010

У меня есть две идеи.

Обе они очень похожи на предложения от hackbod

Вместо реализации подкласса из ViewGroup, вы можете создать что-то вроде расширяющего SquareButton Buttonили SquareTableLayout, расширяющий TableLayout.

Переопределить класс конструктора, чтобы вы заменили значение ширины или высоты на наименьшее значение из них обоих.Я не уверен, но, думаю, вы сможете использовать новые макеты в XML-описании.

Возможно, проще создать просто SquareTableLayout

Тогда просто установите ширину и высотувсех элементов в TableLayout до 0dip, а вес всех из них равен 1.

Предполагая, что в вашей таблице NxN элементов, все они получат одинаковую ширину и одинаковую высоту из-за одинакового веса.

0 голосов
/ 30 октября 2010

Вы хотите проверить TableLayout.

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