我正在使用
java.awt.font.TextLayout
类来测量文本字符串的边界。在此测量中,我需要包含任何尾随空格。然而,默认情况下,TextLayout 在计算文本边界时似乎会忽略任何尾随空格。这是一个例子:
import java.awt.geom.*;
import java.awt.font.*;
import java.text.*;
public class scratch
{
public static double measureTextWidth(String text)
{
AttributedString astring = new AttributedString(text);
AffineTransform at = new AffineTransform();
FontRenderContext frc = new FontRenderContext(at, true, true);
TextLayout layout = new TextLayout(astring.getIterator(), frc);
return layout.getBounds().getWidth();
}
public static void main(String args[])
{
System.out.println(measureTextWidth("sometext"));
System.out.println(measureTextWidth("sometext "));
}
}
此代码为两个字符串返回相同的宽度,忽略第二个字符串的尾随空格。
有没有办法让 TextLayout 在计算提供的文本字符串的宽度时考虑尾随空格?
layout.getBounds()
返回实际内容周围的边界框,因此它不仅不包括尾随空白,也不包括前导空白,甚至不包括第一个和最后一个非字符图形中的空白。空格字符,至少只要您忽略框的 x
值即可。
更糟糕的是,它的文档说:
由于光栅化效果,此边界可能不会包含 TextLayout 渲染的所有像素。
您最可能想要的是获得 TextLayout
的 提前
layout.getBounds().getWidth()
替换为 layout.getAdvance()
。