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