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种方法 单行/多行文字(未知高度/固定高度)

转 图片多行文字的水平垂直居中

多行文本,垂直居中显示,文字超出高度显示省略号

boundingRectWithSize 为多行标签返回错误的高度值

具有固定高度的表格单元格中的自动布局多行标签