libgdx - разместить таблицу в правом верхнем углу экрана - PullRequest
0 голосов
/ 03 августа 2020

У меня возникла проблема с размещением «таблицы» в правом верхнем углу экрана:

|----------|
|         X|
|          |
|          |
|----------|

Table statusTable = new Table(skin);
statusTable.add(new DateLabel(skin));
statusTable.row();
statusTable.add(new TextButton("Funds:", skin));
statusTable.row();
statusTable.add(new TextButton("Tax rate:", skin));
...
this.statusTable.setPosition(width, height, Align.bottomLeft);

Достигнув точки #setPosition, ширина и высота таблицы установлены на 0, поэтому позиционирование стоит как-то по центру угла:

|----------X
|          |
|          |
|          |
|----------|

Думаю, я не очень хорошо понимаю, о чем идет речь, и перед написанием моего собственного алгоритма я хотел бы знать, существует ли лучшая практика.

Спасибо за любой комментарий.

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Если вы добавляете таблицу непосредственно в сцену (например, она не находится внутри какой-либо другой таблицы), было бы проще настроить виджет таблицы так, чтобы он заполнял его родительский элемент, а затем установить его гравитацию в верхнем правом углу, чтобы его логическое таблица (фактические ячейки в виджете) подтягивается к углу.

Table statusTable = new Table(skin);
statusTable.add(new DateLabel(skin));
statusTable.row();
statusTable.add(new TextButton("Funds:", skin));
statusTable.row();
statusTable.add(new TextButton("Tax rate:", skin));

// ...

statusTable.top().right();
statusTable.setFillParent(true);
stage.addActor(statusTable);

Кстати, ваш метод не работал, потому что размер таблицы еще не был рассчитан, если он еще не нарисован, и вы используете противоположный угол того, что хотите выровнять. Вы можете вызвать statusTable().pack() перед вызовом setPosition, и он должен работать, если width и height - координаты правого верхнего угла области просмотра, и вы использовали Align.topRight.

1 голос
/ 03 августа 2020

Размер вычисляется во время выполнения, и, поскольку вы не знаете размер таблицы, я бы позволил другой таблице вычислить ее позицию.

Я бы добавил пустую расширенную ячейку перед statusTable , оба внутри rootTable , который заполняет всю сцену (используя setFillParent () )

┌────────┬───┐
│        │ X │ -> empty expandX cell | statusTable | row
├────────┴───┤
│            │
│            │ -> empty expand, colspan(2) cell
│            │
└────────────┘

Другим «решением» может быть установка позиции таблицы во время выполнения

Table statusTable = new Table(skin) {
    @Override
    public void act(float delta) {
        super.act(delta);
        setPosition(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), Align.topRight);
    }

};
...