48

作为国际化 Android 应用程序的一部分,我遇到了在正确位置动态换行或断字的需要。

我的所有字符串都在 strings.xml 文件中进行了外部化,但我没有找到任何关于 Android 中的断字的文档。

我希望能够建议类似于我在 LaTeX 中的连字符位置:

http://en.wikipedia.org/wiki/Hyphenation_algorithm

但我没有发现任何迹象表明这是否可能。我错过了框架中的任何内容吗?其他人在做什么,例如使用没有明显位置来分句的日文字符串?你只是在正确的位置添加空格吗?

我可以动态调整字体大小以适应某些布局,但对于跨越多行的较长消息不起作用。该怎么办?

4

6 回答 6

13

它是来自 Android 6 Marshmellow 的新事物。

尝试将此添加到您的 TextView xml

android:hyphenationFrequency="none"
于 2017-09-21T07:49:10.543 回答
7

换行的管理可能很麻烦。最好的选择是使用 UTF 换行修饰符控制字符,因为 android 支持完整的 UTF

我知道有人提到“软连字符”,但还有很多。

您还可以在缺少空格的语言的单词之间使用“零宽度空格”,这样您就不必依赖字典解释。您还可以将其用作语言中的软连字符,允许在某些点将某些单词分行。

当使用您不想破坏但希望文本到语音系统正确识别它的复合词时,您应该使用“单词分隔符”字符。不要使用“零宽度非破坏空间”,因为它已被弃用,因为它用作 BOM。

最后,如果您想要一个空格但不想换行,请使用简单的不间断空格。

于 2012-09-09T18:22:02.670 回答
6
于 2016-02-04T08:16:36.790 回答
5

以下库支持连字符。它为您执行所有类型的文本对齐(左/右/居中/对齐)和断字。并非所有语言都已添加,但可以根据需要添加。该库不使用WEBVIEWSSUPPORTS SPANNABLES并允许LONG TEXT

图书馆https ://github.com/bluejamesbond/TextJustify-Android

安卓:2.2 到 5.X

设置

DocumentView documentView = addDocumentView(new StringBuilder("Your long text content"), DocumentView.PLAIN_TEXT);
documentView.getDocumentLayoutParams().setTextAlignment(TextAlignment.JUSTIFIED);
documentView.getDocumentLayoutParams().setHyphenator(new Hyphenator(HyphenPattern.PT));
documentView.getDocumentLayoutParams().setHyphenated(true);
于 2015-01-14T21:03:17.697 回答
3

这个问题很老,但刚刚为我找到了最佳解决方案:

我不得不说我正在用 Xamarin 编程,所以代码是用 C# 编写的,但移植到 java 中应该不是问题。

我使用 NHyphenator Logic ( https://github.com/alkozko/NHyphenator ) 插入 SoftHyphens(UTF8 Symbol - 0x00AD),因此 Textview 在正确的位置进行断字。

为了获得其他语言的连字符,我使用了 openoffice 词典。例如,我必须获得德语-瑞士语的连字符

http://extensions.openoffice.org/en/search?f[0]=field_project_tags%3A157 1. 下载扩展 2. 用winrar 或其他软件解压 3. 复制hyph_xx_xx/hyph_xx_xx.dic 文件 4. 添加新的连字符类的语言

NHyphernator 资源文件被声明为: hyph-xx-xx.pat.txt --> 没有注释的 dic 文件内容 hyph-xx-xx.hyp.txt --> 包含单词例外的文件,其中连字符的逻辑确实如此没有给出正确的结果

如果有人想要 Xamarin 的便携式库,请告诉我,我可以上传它。

编辑:

在 TEXtview 中,breakstrategy 应该设置为 Balanced。API 级别 > 23,否则不要使用中断策略。

编辑:

这是单声道/xamarin 代码: https ://github.com/sma84/NHyphenator-Mono

于 2016-11-11T12:37:12.693 回答
-2

如果此错误尚未修复, setEllipsize可能会有所帮助。

于 2010-12-15T21:15:18.860 回答