Libgdx标签多行文本高度

11

我在LibGdx上进行了一个小测试,测试的是多行标签,似乎我无法获取换行后每行的高度。以下是代码。理论上,aLebel的高度应该大于bLabel。但实际结果相同。

代码:

aLabel.setText("this is a super long long long text that need wrapping."); // line wrapped into 3 lines
aLabel.setWrap(true);
aLabel.setWidth(470);
doLog("aLabel.getHeight(): " + aLabel.getHeight());

bLabel.setText("this is short."); // unwrapped line
bLabel.setWrap(true);
bLabel.setWidth(470);
doLog("bLabel.getHeight(): " + bLabel.getHeight());

结果:

aLabel.getHeight(): 45.0
bLabel.getHeight(): 45.0

有没有人知道如何在LibGdx中获取实际的多行高度?谢谢。


1
也许在该宽度下所有文本都适合一行吗?getPrefHeight()会给你更好的值吗? - P.T.
谢谢PT。不是的。所有文本都正确显示,分为3行。然而,getPrefHeight()返回0高度。 - Ziiiii
这个网址 https://dev59.com/c2Ml5IYBdhLWcg3wP1DE 有帮助吗? - P.T.
4个回答

6

Pack sizes将窗口小部件调整为其首选大小,不多也不少。换行的标签的首选宽度为0。

Label label = new Label(...);
label.setWrap(true);
label.setWidth(123);
label.setHeight(label.getPrefHeight());

6

我多年来一直遇到这个问题,意外地通过设置宽度和重复打包标签解决了它。请注意,多行标签从未打算自己计算宽度,因此您必须从其父级外部设置宽度。

public Label createLabel() {
    // Create label and set wrap
    Label label = new Label("Some long string here...", skin);
    label.setWrap(true);

    // Pack label
    label.pack(); // This might not be necessary, unless you're changing other attributes such as font scale.

    // Manual sizing
    label.setWidth(textWidth); // Set the width directly
    label.pack(); // Label calculates it's height here, but resets width to 0 (bug?)
    label.setWidth(textWidth); // Set width again

    return label;
}

使用的LibGDX版本:1.6.4


2
这可以通过向包含表格标签的单元格添加限制来实现:
Label label = new Label("Example", new Label.LabelStyle(font, Color.WHITE));
label.setWrap(true);

Table table = new Table();
table.add(label).width(WITH);

有关如何使用Table的更多信息,请访问:https://github.com/libgdx/libgdx/wiki/Table


1
我遇到了同样的问题,似乎Label类中不存在解决此问题的方法。同时,我也同意您的观点,getHeight()方法应该返回Actor的实际高度,所以我不知道这是否是一个错误,或者这种行为背后是否有理由。
无论如何,我通过使用BitmapFont的getWrappedBounds方法来解决这个问题。虽然不是很简短,但对于您的示例,它应该是以下内容:
doLog("aLabel.getHeight(): " + aLabel.getStyle().font.getWrappedBounds(aLabel.getText(), aLabel.getWidth()).height);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接