TextView中的统一文本环绕

时间:2013-11-03 18:02:15

标签: android android-layout android-view textview

我需要在TextView中使用漂亮的文本换行,特别是对于标题中的文本。

TextView的文本换行可能如下所示,其中最后一个单词在新行中:

| ========================= |
|          =====            |

我想要的是在线条宽度更均匀的情况下进行包装:

|     ================      |
|      ==============       |

可以很容易地为一种语言添加“\ n”并在不同的屏幕尺寸上进行测试,但在翻译量超过10时则不行。

6 个答案:

答案 0 :(得分:3)

我修改了TextView并创建了UniformTextView。在调查TextView源代码后,我决定将TextView的宽度最小化,以获得首选行号。

    <pl.dziobas.uniformtextview.UniformTextView
        android:text="@string/sample_text"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        app:prefLineNumber="2"
        style="@style/sample_style" />

对我来说,它的效果令人满意 UniformTextView example

来源可在github

上找到

答案 1 :(得分:1)

您可以在字符串资源xml中添加'\ n'来添加换行符,以便您自己管理包装。

另一种方法是动态添加'\ n',你得到字符串长度除以2并在任一方向搜索下一个空格,在第一个找到你只需添加'\ n'。一个黑客,但可能工作。

除此之外,Android中没有太多用于连字符或排版的内容。这篇文章可能会给你一些提示:http://smarter-than-the-average-pierre.blogspot.co.at/2011/10/bad-android-typography-tale-of-text.html

答案 2 :(得分:1)

Github AutoFittextView BitBucket AutoScaletextView中有一个开源项目。

您可以根据自己的要求进行更改。

我尝试了AutoScaleTextview并进入了Output 下面的

enter image description here

希望这会对你有所帮助。

答案 3 :(得分:1)

算法大概是:

  1. 计算String宽度(使用Paint.measureText或其他内容)
  2. 如果它小于容器(TextView)宽度,只需使用它
  3. 否则按容器划分String宽度,以了解要输入多少"\n"
  4. 使用一些搜索算法查找最接近宽度的1 / n的空格字符(如果字体不是等宽字,则再次使用measureText
  5. 在该点处的子串并且对于n-1(n> 1)
  6. 重复点4

    可能需要进行一些调整,比如使用容器宽度比实际小一些小。

答案 4 :(得分:0)

如果您事先知道文本是什么(我的意思是它是硬编码文本),您可以在dp中修复TextView的宽度,以便它正确包装,否则您也可以使用android:ems来修复一行中的最大字符数。所以你的TextView可以是:

<TextView
   android:layout_height="wrap_content"
   android:layout_width="100dp"
   android:lines="2"/>

OR

  <TextView
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:ems="15"
     android:lines="2" />

我希望这有帮助!

答案 5 :(得分:0)

查看Android自己的TextView自动文本大小,添加API 26以及支持库,该库从API 14开始支持app:autoSizeTextType="uniform"

玩得开心!

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html