我使用启用了文本换行的Label。在这种情况下,文本包装错误。文本包装成3行,当它应该只有2行时,Label大小只反映2行。我通过代码进行了调试,发现其原因在于Label.layout()方法。不确定这是一个错误还是我做错了什么。
在下面的代码中,您可以看到文本被设置为GlyphLayout两次。它第一次包装正确,第二次我们使用减小的宽度,它像以前一样包裹成更多的线条。我认为第二次将文本设置为GlyphLayout时,应使用相同的宽度。
public class Label extends Widget {
public void layout () {
...
float width = getWidth(), height = getHeight();
...
GlyphLayout layout = this.layout;
float textWidth, textHeight;
if (wrap || text.indexOf("\n") != -1) {
// Set the text into the GlyphLayout. The text is wrapped correctly here
layout.setText(font, text, 0, text.length, Color.WHITE, width, lineAlign, wrap, ellipsis);
textWidth = layout.width;
textHeight = layout.height;
...
} else {
textWidth = width;
textHeight = font.getData().capHeight;
}
...
// Set the text again into the GlyphLayout. This time with the width that we got when we set it the first time
// This time the text is wrapped wrong as it uses less width as it should
layout.setText(font, text, 0, text.length, Color.WHITE, textWidth, lineAlign, wrap, ellipsis);
...
}
}
感谢您检查 西蒙
答案 0 :(得分:0)
确保invalidate()
标签,然后pack()
标签,以便计算任何新的首选尺寸;这可能会也可能不会解决问题。
查看Label
的源代码,您可以看到无论文本环绕与否,始终都会调用layout.setText()
的最后一次调用。
之前的layout.setText()
调用用于为后来的调用设置textWidth
和textHeight
,以便实际使用这些值。
如果打开包装或有换行符,则宽度和高度设置为标签的宽度和高度,如果关闭,则宽度设置为实际文本宽度,高度设置为字体数据高度。
从上面可能导致这种情况发生的另一个问题是,如果您缩放了字体和/或标签。未在Label.layout()
范围内应用缩放因子,这可能导致标签大小为2行,而实际文本为3行,因为宽度不允许包装设置为打开时溢出。
如果所有其他方法都失败了,我会确保您的字体文件正确无误,并且文本中没有任何可能导致新行发生的字符或数据。
我还建议使用相同字形宽度和高度的另一种字体,看看问题是否仍然存在。如果没有,那么至少你知道这是与字体有关的问题而不是标签。
希望这有助于你。
答案 1 :(得分:0)
此问题已在 libgdx 1.9.12 中解决