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

标签 android text textview

我有一个 TextView,它的 textSize3。我想在其中显示这个字符串:

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 中,我可以看到 textAreaWidthlineWidth 的值:

textAreaWidth > 668
lineWidth > 668.0

如您所见,textAreaWidthlineWidth 是相等的,但是 TextViewline 分成 2 行并显示它们:

لورم  ایپسوم  متن  ساختگی  با  تولید  سادگی  نامفهوم  از  صنعت  چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف 
بهبود

为什么 TextView 在行宽等于文本的可用宽度时打断 line

最佳答案

我将此添加为答案而不是评论,因为它相对深入,但不幸的是我没有对您的问题的准确答案。

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

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

根据我的个人经验,第一个在准确测量文本宽度方面做得更好,而第二个在准确测量文本高度方面做得更好。

但是,这两种方法都无法完美衡量文本所需的精确大小(即适合文本的最小边界框)并且这两种方法都无法给出与相同的答案TextView 使用。

我(诚然有限)的理解是 TextView 使用 StaticLayoutDynamicLayout 类来测量文本。在非常简要地研究了这些类(class)之后,我没有看到一个明显的方法来回答“这篇文章会有多宽”;相反,他们似乎更擅长回答“给定 N 像素宽度,这段文本将有多少行”。

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

关于android - 当行宽等于 TextView 的宽度时,为什么 TextView 会断行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958030/

相关文章:

android - 通过 Android 10 SDK 升级无法从后台应用访问剪贴板

c++ - 从原始文件中取出奇偶行到新文件,然后拼接回 C++

jquery 用未知字符替换 text() 中的字符串

html - 导航文本干扰常规?

java - Android 没有正确地将文本追加到 textview

android - 在 Cordova Crosswalk (Android) 端口启动时崩溃

android - 从位图中获取 URI?

javascript - CordovaJS-错误 : Manifest merger failed : uses-sdk:minSdkVersion 1 cannot be smaller than version 19 declared in

android-layout - 以编程方式遵循 XML 的 Android TextView

android - 在android中的TextView上将背景调整为文本