Libgdx标签多行文字高度

Zii*_*iii 5 java android label libgdx

我在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());
Run Code Online (Sandbox Code Playgroud)

结果:

aLabel.getHeight(): 45.0
bLabel.getHeight(): 45.0
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在LibGdx中获得实际的多行高度?提前致谢。

Nat*_*teS 6

将小部件打包到其首选大小,仅此而已。带包装的标签的首选宽度为 0。

Label label = new Label(...);
label.setWrap(true);
label.setWidth(123);
label.setHeight(label.getPrefHeight());
Run Code Online (Sandbox Code Playgroud)


小智 5

我有这个问题多年,不小心通过设置宽度和包装标签两次解决了它。请注意,多行标签从未打算计算出它们自己的宽度,因此您必须在外部设置它们,最好是从它的父级设置。

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;
}
Run Code Online (Sandbox Code Playgroud)

使用的 LibGDX 版本:1.6.4


Noe*_*tin 1

我遇到了同样的问题,但 Label 类中似乎不存在解决此问题的方法。另外,我同意你的观点, getHeight() 方法应该返回 Actor 的真实高度,所以我不知道这是否是一个错误,或者该行为背后是否有原因。

无论如何,我如何解决这个问题是通过使用 BitmapFont 的 getWrappedBounds 方法。它并不短,但对于您的示例来说,它将如下所示:

doLog("aLabel.getHeight(): " + aLabel.getStyle().font.getWrappedBounds(aLabel.getText(), aLabel.getWidth()).height);
Run Code Online (Sandbox Code Playgroud)