表布局的行为不符合预期

时间:2016-01-12 23:56:57

标签: java libgdx scene2d

我有这段代码构建一个UI:

    // Trying to fix the layout by setting the defaults for the next row.
    layout.row().expand(false, false).fill(false).colspan(4);

    Label playerLabel = new Label(Settings.playerName + "  " + playerScore, skin, "defaultWhite");
    layout.add(playerLabel).colspan(1);

    Label historyLabel = new Label(getHistory(), skin, "defaultWhite");
    historyLabel.setAlignment(2);
    layout.add(historyLabel).colspan(2).expandX();

    Label cpuLabel = new Label(cpuScore + "  CPU", skin, "defaultWhite");
    layout.add(cpuLabel).colspan(1);

    layout.row();

我预计它会让玩家和cpu分数被推到一边和历史标签以获得剩余的空间,但这就是它正在做的事情:

Game UI

我在这里做错了吗?我看不出可能是什么错误。

如果您想查看其余代码,请查看github,或者只是询问,我会提供更多背景信息。

2 个答案:

答案 0 :(得分:1)

不要使用一个表执行整个布局,而是尝试嵌套表,其中每个内部表都是一行。这样就不再需要colspan了,你可以创建列并按照自己的意愿布置每个行表,而不会影响其他行。

答案 1 :(得分:0)

如果您不想按照接受的答案中的建议使用更多的表格,我设法通过在评分单元格中调用uniform()来使其工作,如下所示:

layout.row().expand(false, false).fill(false).colspan(4);

Label playerLabel = new Label(Settings.playerName + "  " + playerScore, skin, "defaultWhite");
layout.add(playerLabel).colspan(1).uniform();

Label historyLabel = new Label(getHistory(), skin, "defaultWhite");
historyLabel.setAlignment(2);
layout.add(historyLabel).colspan(2).expandX();

Label cpuLabel = new Label(cpuScore + "  CPU", skin, "defaultWhite");
layout.add(cpuLabel).colspan(1).uniform();

layout.row();