为什么当行的宽度等于TextView的宽度时TextView会断行

时间:2019-07-09 17:42:55

标签: android text textview

我有一个TextViewtextSize的{​​{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); 中,我可以看到LogcattextAreaWidth的值:

lineWidth

您可以看到textAreaWidth > 668 lineWidth > 668.0 textAreaWidth相等,但是lineWidthTextView分成 2 行并显示:

line

为什么لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود 在行的宽度等于文本的可用宽度时会中断TextView

2 个答案:

答案 0 :(得分:1)

我将其添加为答案而不是评论,因为它相对深入,但是很遗憾,我对您的问题没有确切的答案。

我通常使用两种不同的方法来测量文本:

  • TextPaint.measureText()
  • TextPaint.getTextBounds()

以我的个人经验,第一个在为您精确测量文本宽度方面做得更好,第二个在给您精确测量文本高度方面做得更好。 / p>

但是,这两种方法都不能完美地衡量文本所需的精确大小(即文本所适合的最小边框)。 和这两种方法都无法提供与{{1 }}使用。

我的理解(有限地)是TextView使用TextViewStaticLayout类来测量文本。在非常简短地研究了这些类之后,我没有发现一种明显的方式来回答“本文将有多广泛”。取而代之的是,他们似乎更好地回答了“给定N个像素宽度,此文本将有多少行”。

希望这可以帮助您指出正确的方向。

答案 1 :(得分:0)

如果您希望它是单行,请使用TextView的maxlines属性:

android: maxLines="1"