自动断字 ( Auto Hyphenation ) 是什么,为什么你的 App 里应该使用它

自动断字 ( Auto Hyphenation ) 是什么,为什么你的 App 里应该使用它

和宽度恒定的汉字不同,西文单词的长度是一个变量。这就给文章的排版带来了对齐上的问题。无论是两端对齐、靠左还是靠右对齐都看起来不够优雅。在正式的文本中,往往使用断字(Hyphenation)来缓和这个问题。望文生义的来看 hyphenation 这个词,就是用 hyphen(短横 - )将单词断开。正确的断字只能以音节为单位,比如 impeachment 可以断为 impeach-ment 或 im-peachment 但不能断为 impe-achment。

直观的看下区别,左为断字前,右为断字后:

在铅字时代,编辑们需要人工断字。幸运的是,比较现代的排版工具基本都已经提供了自动断字的功能,注意下面两幅截图中文字的右侧边缘,不难看出断字前后的区别:

除了使排版更加优雅,在寸土寸金的移动设备屏幕上节省空间的意义也不容小觑。或许有同学在想,我的 App 中基本都是中文,断字对我应该没什么作用。其实,在中英文混排中没有断字仍会影响阅读体验:


下面我们来看下具体在 iOS / Android 上如何实现自动断字

iOS 中非常简单,TextKit 提供了良好的自动断字支持,可以通过设置 hyphenationFactor 属性非常方便的实现自动断字:


Android 加入自动断字的时间比较晚,Android 5.0 中对文字的显示和渲染进行了一系列的改进,其中就包括了对 TextView 默认开启自动断字。基本上是移植了 TeX 相应的算法和模型

感兴趣的同学可以看下 Android Dev Summit 2015 上的相关主题:

youtube.com/watch?

speakerdeck.com/raphlin

以 Android 5.0+ 约 25% 的占有率,多少有点远水解不了近渴。好在我们还有其他选择:

github.com/bluejamesbon


这是一个很轻量的实现,与 TeX 的大而全(支持 67 种语言)不同,TextJustify-Android 目前只支持 英语、德语和法语。

TextJustify-Android 自动分词的实际效果:

编辑于 2016-04-13

文章被以下专栏收录