我有一个 TextView
,它的 textSize
是 3
。我想在其中显示这个字符串:
String line =
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود;
我通过实现 ViewTreeObserver.OnGlobalLayoutListener
接口(interface)在运行时为文本计算 TextView
的可用宽度:
int textAreaWidth;
@Override
public void onGlobalLayout() {
textAreaWidth = textView.getWidth() - (textView.getPaddingLeft() + textView.getPaddingRight());
}
我还像这样计算 line
的宽度:
TextPaint textPaint = textView.getPaint();
float lineWidth = textPaint.measureText(line);
在 Logcat
中,我可以看到 textAreaWidth
和 lineWidth
的值:
textAreaWidth > 668
lineWidth > 668.0
如您所见,textAreaWidth
和 lineWidth
是相等的,但是 TextView
将 line
分成 2 行并显示它们:
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف
بهبود
为什么 TextView
在行宽等于文本的可用宽度时打断 line
?
最佳答案
我将此添加为答案而不是评论,因为它相对深入,但不幸的是我没有对您的问题的准确答案。
我通常使用两种不同的方法来测量文本:
TextPaint.measureText()
TextPaint.getTextBounds()
根据我的个人经验,第一个在准确测量文本宽度方面做得更好,而第二个在准确测量文本高度方面做得更好。
但是,这两种方法都无法完美衡量文本所需的精确大小(即适合文本的最小边界框)并且这两种方法都无法给出与相同的答案TextView
使用。
我(诚然有限)的理解是 TextView
使用 StaticLayout
和 DynamicLayout
类来测量文本。在非常简要地研究了这些类(class)之后,我没有看到一个明显的方法来回答“这篇文章会有多宽”;相反,他们似乎更擅长回答“给定 N 像素宽度,这段文本将有多少行”。
希望这可以帮助您指明正确的方向。
关于android - 当行宽等于 TextView 的宽度时,为什么 TextView 会断行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958030/