如何处理RTL语言预先4.2版本的Android?(How to handle RTL langua

2019-08-18 16:03发布

背景

TextView中总是有问题与RTL(从右到左)的语言。 因为我只知道如何读希伯来语(除英语外),我将谈论它的问题:

  • 文本对齐方式(我不是在谈论重力)。 作为一个RTL语言,希伯来语把字从右向左(与英国是相反)。

    为了展示它是如何讨厌,想象,而不是显示的“Hello world”。 你通常会得到“.Hello世界”。 这可能,如果你在一个句子有它很容易固定,但它是当有多个标点字符更难。

  • 元音位置。 希伯来语不需要元音为了阅读的文本,但有时它很难没有他们(尤其是圣经)来读取。 对于元音,希伯来语具有所谓“NIKUD”,这实际上是一样的字母里面点。 在Android的问题是,他们通常放置在错误的位置。

    为了展示它是如何讨厌,想象,而不是显示的“Hello world”。 你通常会得到“.eHlol owrld”。 即使你尝试修复它(把元音总是一个字符在当前操作后),在信中的位置是不正确的(想象,“E”中的“Hello”将是像上面的“H”,为例子)。

只有在4.2版本(读这里 ,在“原生RTL支持”),谷歌已经修复了所有的希伯来文相关的问题(或者至少看起来如此)。

问题

用希伯来语的问题已经引起了以色列的每个载波和每个ROM定制机有其自身如何解决不同的问题,这使得它几乎不可能处理预4.2设备RTL文本解决方案。

事情可能会变得更加令人沮丧的情况下,文本包括希伯来文和英文字母。

我已经试过

我读过许多网站在谈论这些问题,我已经尝试了解决方案的许多变体,没有一个解决了所有设备上的问题:

  • 有人建议把字符“\ u200F”(或“\ u202D”)结尾/开始/两种文字。

  • 有人建议使用Html.fromHtml()方法,并把一些特别的东西在那里。

  • 有些人甚至建议使用web视图,而不是(也许使用WebSettings.setDefaultTextEncodingName() )。

问题

是否有此问题的一个明确的解决方案吗?

我将承担最好的事情是,由于Android 4.2版本解决了这一点,而Android是开源的,我们应该有TextView的导入,我们可以使用图书馆,但谷歌并没有提供这样的库呢。

Answer 1:

可悲的是,我不认为有一个很好的解决方案(“好”的意思是“做这项工作,是现成的”)。 对于我们的支持希伯来语自己的Android应用程序,我们使用,我们开发了多年的自定义渲染机制。 呈现装置做的一切:专有的字体; 双向(比迪)数据; 字形布局; 断行分析; 文本流; 等一些尝试使用Android原生的文字处理能力(尤其是前4.2)的问题是:

  1. 非常糟糕的字体。 但是,您可以打包第三方字体像幻觉记忆是相当不错的。 正确的字体可以创造奇迹与nekudot和te'amim 1的定位,如果你需要。 (我同意你关于重要指向正确的位置如何,阅读希伯来文与错位的nekudot就像读一满屏的验证码 。)

  2. 越野车比迪分析。 是什么使得它更糟糕的是,错误似乎是不同的Android版本的不同。 修改文本,包括战略地位比迪烟的格式化代码(RTL标志; LTR标记等等)可以克服很多这些错误的(见讨论这里 ,这是不具体到Android)。 然而,这是一个讨厌做这做,因为Android的版本之间的不一致,很难提前预测什么帮助的框架将需要。

  3. 右到左的问题没有(或未经深思熟虑)框架级意识。 举例来说,好运气得到的滚动条上显示希伯来TextView的左侧。 对于我们的应用,我们必须建立一个完整的滚动条系统只是为了得到这个工作,我们怎么想。 (良认为Android是开源的!)

  4. 普线和字断分析。 在我们测试的Android的至少一个早期版本认为每个nikud标记是一个字边界。 当涉及到换行符,系统往往不知道如何处理希伯来语标点符号,如maqaf,gershayim,或SOF帕苏克。

  5. 在一些较新的Unicode字符(如HOLAM HASER FOR VAV-U + 05BA新到Unicode 5.0)的不承认由系统希伯来语脚本。

我的建议是,除非你是准备建一个顶至底的文字处理系统你自己,你放弃了高品质的文本显示器上预先4.2版本的Android,特别是如果你需要支持nekudot和te'amim 。 此外,打算使用我的第一个两分上面提到的技术。

1圣经的cantillation标记



Answer 2:

随着2013年8月的,Android已经发布的API文档,这可能会满足您的需求的双向定向格式化。 这是包含在Android的支持V4库,我认为应该在之前的版本到Android 4.2运行。

请参阅: http://developer.android.com/reference/android/support/v4/text/BidiFormatter.html



文章来源: How to handle RTL languages on pre 4.2 versions of Android?