我有一个TextView
是textSize
的{{1}}。我想在其中显示此字符串:
3
我通过实现String line =
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود;
接口来计算运行时文本的TextView
可用宽度:
ViewTreeObserver.OnGlobalLayoutListener
我还像这样计算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
分成 2 行并显示:
line
为什么لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف
بهبود
在行的宽度等于文本的可用宽度时会中断TextView
?
答案 0 :(得分:1)
我将其添加为答案而不是评论,因为它相对深入,但是很遗憾,我对您的问题没有确切的答案。
我通常使用两种不同的方法来测量文本:
TextPaint.measureText()
TextPaint.getTextBounds()
以我的个人经验,第一个在为您精确测量文本宽度方面做得更好,第二个在给您精确测量文本高度方面做得更好。 / p>
但是,这两种方法都不能完美地衡量文本所需的精确大小(即文本所适合的最小边框)。 和这两种方法都无法提供与{{1 }}使用。
我的理解(有限地)是TextView
使用TextView
和StaticLayout
类来测量文本。在非常简短地研究了这些类之后,我没有发现一种明显的方式来回答“本文将有多广泛”。取而代之的是,他们似乎更好地回答了“给定N个像素宽度,此文本将有多少行”。
希望这可以帮助您指出正确的方向。
答案 1 :(得分:0)
如果您希望它是单行,请使用TextView的maxlines属性:
android: maxLines="1"