Libgdx标签多行文字高度

时间:2014-06-18 02:31:25

标签: java android libgdx label

我在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中获得实际的多行高度?提前谢谢。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我有同样的问题,似乎在Label类中没有一个方法来解决这个问题。另外,我同意你的意见,getHeight()方法应该返回Actor的真实高度,所以我不知道这是一个错误还是背后的原因。

无论如何,我如何通过使用BitmapFont的getWrappedBounds方法解决了这个问题。它不短,但对于你的例子,它将是以下:

doLog("aLabel.getHeight(): " + aLabel.getStyle().font.getWrappedBounds(aLabel.getText(), aLabel.getWidth()).height);

答案 3 :(得分:0)

这可以通过向表中包含Label的单元格添加限制来完成:

Label label = new Label("Example", new Label.LabelStyle(font, Color.WHITE));
label.setWrap(true);

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

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