【问题标题】:Libgdx Label multiline text heightLibgdx 标签多行文字高度
【发布时间】: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 高度。

标签: java android libgdx label


【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-19
          • 2019-11-08
          相关资源
          最近更新 更多