[英]Uniform text wrapping in TextView
我需要在TextView中使用漂亮的文本包装,尤其是标题中的文本。
TextView的文本换行可能如下所示,最后一个单词在新行中:
| ========================= |
| ===== |
我想要的是包装宽度更均匀的地方:
| ================ |
| ============== |
可以很容易地为一种语言添加'\\ n'并在不同的屏幕尺寸上测试它,但在有超过10种翻译时则不能。
我修改了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" />
它对我来说是令人满意的。
来源可在github上找到
您可以在字符串资源xml中添加'\\ n'来添加换行符,以便您可以自行管理换行。
另一种方法是动态添加'\\ n',你得到字符串长度除以2并在任一方向搜索下一个空格,在第一个找到你只需添加'\\ n'。 一个黑客,但可能工作。
除此之外,在Android中没有太多用于连字符或排版的内容。 这篇文章可能会给你一些提示: http : //smarter-than-the-average-pierre.blogspot.co.at/2011/10/bad-android-typography-tale-of-text.html
Github AutoFittextView和BitBucket AutoScaletextView中有一个开源项目。
您可以根据您的要求进行更改。
我尝试了AutoScaleTextview并到达了下面的OutPut 。
希望这会帮助你。
该算法大致是:
String
宽度(使用Paint.measureText
或其他东西) TextView
)宽度,只需使用它 String
宽度以知道要输入多少"\\n"
measureText
则再次使用measureText
) 可能需要进行一些调整,比如使用容器宽度比实际小一些小。
如果您事先知道文本是什么(我的意思是它是硬编码文本),您可以在dp中修复TextView的宽度,以便它正确包装,否则您也可以使用android:ems来修复最大数量一行中的字符。 所以你的TextView可以是:
<TextView
android:layout_height="wrap_content"
android:layout_width="100dp"
android:lines="2"/>
要么
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:ems="15"
android:lines="2" />
我希望这有帮助!
查看Android自己的TextTextSizing for TextView
,添加API 26和支持库,支持从API 14开始支持app:autoSizeTextType="uniform"
。
玩得开心!
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.