Libgdx 标签多行文字高度
Posted
技术标签:
【中文标题】Libgdx 标签多行文字高度【英文标题】:Libgdx Label multiline text height 【发布时间】:2014-08-08 04:42:06 【问题描述】:我在 LibGdx 上做了一个小测试,在 Multi-line Label 上,似乎我无法获得换行线的高度。以下是代码。理论上,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 中获得实际的多行高度吗?提前致谢。
【问题讨论】:
也许所有文本都适合该宽度的一行?getPrefHeight()
会给你带来更好的价值吗?
感谢 PT。没有。所有文本正确显示,用 3 行包裹。但是,getPrefHeigh() 返回 0 高度。
***.com/questions/18557448 有帮助吗?
【参考方案1】:
我多年来一直遇到这个问题,但通过设置宽度和包装标签两次意外地解决了这个问题。请注意,多行标签从未打算计算出它们自己的宽度,因此您必须在外部设置它们,最好是从它的父级设置。
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】:Pack 将小部件的大小调整为其首选大小,仅此而已。带环绕标签的首选项宽度为 0。
Label label = new Label(...);
label.setWrap(true);
label.setWidth(123);
label.setHeight(label.getPrefHeight());
【讨论】:
【参考方案3】:我遇到了同样的问题,而且似乎在 Label 类中不存在解决此问题的方法。另外,我同意你的观点,getHeight() 方法应该返回 Actor 的实际高度,所以我不知道这是错误还是该行为背后的原因。
无论如何,我解决问题的方法是使用 BitmapFont 的 getWrappedBounds 方法。它不短,但对于您的示例,它将如下所示:
doLog("aLabel.getHeight(): " + aLabel.getStyle().font.getWrappedBounds(aLabel.getText(), aLabel.getWidth()).height);
【讨论】:
【参考方案4】:这可以通过向包含表中标签的单元格添加限制来完成:
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
【讨论】:
以上是关于Libgdx 标签多行文字高度的主要内容,如果未能解决你的问题,请参考以下文章
div垂直居中的N种方法 单行/多行文字(未知高度/固定高度)