为了账号安全,请及时绑定邮箱和手机立即绑定

如何在4.2之前的Android版本上处理RTL语言?

如何在4.2之前的Android版本上处理RTL语言?

慕神8447489 2019-12-05 15:54:42
背景TextView始终存在RTL(从右至左)语言的问题。因为我只懂希伯来语(除了英语),所以我将讨论它的问题:文本对齐(我不是在谈论重力)。作为一种RTL语言,希伯来语从右到左放置单词(相比之下,英语则相反)。为了说明这是多么烦人,请想象一下,而不是显示“ Hello world”。您通常会收到“ .Hello world”。如果您只用一个句子就可以很容易地解决这个问题,但是当有多个标点符号时很难。元音位置。希伯来语不需要元音即可阅读文本,但有时没有元音(尤其是圣经)很难阅读。对于元音,希伯来语具有所谓的“ NIKUD”,实际上就像字母中的点。Android中的问题是它们通常放置在错误的位置。为了说明这是多么烦人,请想象一下,而不是显示“ Hello world”。您通常会获得“ .eHlol owrld”。即使您尝试修复它(将元音始终放置在当前字符之后的一个字符),字母中的位置也不正确(假设“ Hello”中的“ e”将类似于“ H”上方,因为示例)。仅在4.2版(请在此处的 “本地RTL支持”下阅读)上,Google修复了所有与希伯来语有关的问题(或至少看起来如此)。问题希伯来语的问题已导致每个以色列运营商和每个定制ROM制造商都有自己的解决方案,以解决不同的问题,这实际上使得在4.2之前的设备上无法处理RTL文本。万一文本同时包含希伯来语和英语字母,事情可能会更加令人沮丧。我尝试过的我读过许多谈论这些问题的网站,并且尝试过许多解决方案的变体,但没有一个能解决所有设备上的问题:有人建议在文本的末尾/开头/两边都加上字符“ \ u200F”(或“ \ u202D”)。有人建议使用Html.fromHtml()方法,并在其中放置一些特殊内容。甚至有人建议改用WebView(也可以使用WebSettings.setDefaultTextEncodingName())。问题这个问题有明确的解决方案吗?我认为最好的事情是,因为Android 4.2解决了这个问题,并且Android是开源的,所以我们应该将其TextView导入我们可以使用的库中,但是Google尚未提供这样的库。
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

可悲的是,我认为没有一个好的解决方案(“好”的意思是“做得很好,随时可用”)。对于我们自己的支持希伯来语的Android应用程序,我们使用了我们多年开发的自定义渲染机制。渲染机制可以完成所有工作:专有字体;双向(双向)分析;字形放置 换行分析;文字流 等等。尝试使用本机Android文本处理功能(尤其是4.2之前的版本)的一些问题是:

  1. 字体真烂。但是,您可以打包非常好的第三方字体(如DejaVu)。如果需要的话,正确的字体可以将nekudot和te'amim 1定位成奇迹。(我同意你关于重要指向正确的位置如何,阅读希伯来文与错位的nekudot就像读一满屏的验证码。)

  2. 越野比迪车分析。更糟糕的是,对于不同版本的Android,这些错误似乎有所不同。修改文本以使其包含策略性放置的bidi格式代码(RTL标记,LTR标记等)可以克服许多此类错误(请参见此处的讨论,这不是Android特有的)。但是,这样做很麻烦,并且由于Android版本之间的不一致,因此很难预先预测框架将需要什么帮助。

  3. 没有(或者没有考虑周全)框架级别的从右到左的问题意识。例如,祝您好运,让滚动条显示在希伯来语TextView的左侧。对于我们的应用程序,我们必须构建一个完整的滚动条系统才能使它按我们想要的方式工作。(好认为Android是开源的!)

  4. 行和单词中断分析不良。经过测试的至少一个Android早期版本认为每个nikud标记都是一个单词边界。当涉及到换行符时,系统通常不知道如何处理希伯来语标点符号,例如maqaf,gershayim或sof pasuk。

  5. 系统不会将某些较新的Unicode字符(例如HOLAM HASER FOR VAV-U + 05BA-Unicode 5.0的新字符)识别为希伯来语脚本。

我的建议是,除非您准备自己构建一个从上到下的文本处理系统,否则您将放弃在4.2之前的Android版本上使用高质量的文本显示,特别是在需要支持nekudot和te'amim的情况下。同样,计划使用我在上面的前两点中提到的技术。


查看完整回答
反对 回复 2019-12-05
  • 2 回答
  • 0 关注
  • 542 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信