安卓系统支持从右到左的语言吗?

14

我需要创建一个应用程序,使用多种语言的字符串,包括RTL(从右到左)语言。我想知道Android上RTL(从右到左)支持的当前状态,即使在最新的API上也是如此,例如:

  1. 是否可以动态/静态地检查设备的当前语言是否为RTL类型?我知道可以获取当前区域设置,但我需要一种更通用的方法来检查当前语言是否为RTL。例如,对于英语和法语,它将返回false,但对于阿拉伯语和希伯来语,它将返回true。

  2. 是否可以设置布局以自动镜像RTL语言?例如,如果linearLayout(具有水平方向)的子项为1->2,则现在它将为2<-1,并且新的子项将在左侧创建。

  3. 是否有一个限定符可添加到资源文件夹中,以处理所有RTL语言?例如,“res/layout”用于LTR(从左到右),而“res/layout-rtl”用于RTL语言。

  4. 看起来eclipse的内容协助建议linearLayout使用“android:layoutDirection”,textView使用“android:textDirection”,但当我选择它们时,我会得到编译错误,表示无法识别它们。我也找不到更多关于这些属性的信息。它们是什么意思,为什么我不能使用它们?

编辑:看起来Android 4.1在RTL语言方面有一些改进。想知道它们是什么以及在哪里可以阅读有关它们的信息。


1
RTL指从右到左,LTR指从左到右。这对你来说可能很明显,但对于其他人来说可能不是那么清楚 :) - Amokrane Chentir
感谢您修改我的问题。 - android developer
@CommonsWare 有一个。它是 ldrtl - Eng.Fouad
@Eng.Fouad:这仅适用于4.1及以上版本。我的评论是在2012年2月发布的,早于4.1发布。 - CommonsWare
@CommonsWare你知道有没有用于处理希伯来语的兼容库吗?Android 4.1仍然不太流行...顺便说一下,我认为只有在4.2上他们才做出了最好的改进。请看我在这里的帖子:https://dev59.com/tGox5IYBdhLWcg3wWjDQ#14885782 - android developer
据我所知,无法通过JAR或库项目来改善处理。 - CommonsWare
2个回答

4
从android 4.2开始,有更多关于特殊RTL属性的信息,甚至有一个选项可以自动为RTL语言镜像布局。
更多信息可以在这里找到:https://developer.android.com/about/versions/jelly-bean.html#42-platform-tech
希望他们会添加更多关于如何使用它的信息,包括一些示例代码,甚至是关于此事的支持库。
编辑:现在他们增加了一些有关如何使用新的RTL支持的信息:http://android-developers.blogspot.co.il/2013/03/native-rtl-support-in-android-42.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/hsDu+(Android+Developers+Blog)
不过我想知道NIKUD(希伯来文的元音等价物,除了可选和以点形式而不是字母显示之外,与元音相同)现在是否正常工作。
编辑:现在我已经测试过了,它实际上运行得非常好(这是圣经的第一章):enter image description here

0
  1. ICS 中的 Android RTL 支持有所改进。在 Gingerbread 中,它是设备特定的,例如每个制造商/运营商都实现了自己的双向解决方案,这导致应用程序中存在一些不一致性。

  2. 不需要。良好的双向支持可以通过初始字母 UTF8 代码来镜像文本视图和 canvas.draw 文本,让您更少担心双向支持,更多关注您的应用程序。只需不要强制使用重力和填充父级文本视图即可。

  3. 不,有阿拉伯语/希伯来语等的限定符,您可以改变几乎所有内容。但是良好的设备实现将不需要除翻译之外的任何东西。

  4. 如果您安装了一些旧的或设备特定的 API,则可能会发生这种情况。因此,它不会在整个 Android 上工作并导致编译错误。但是还有更多原因会导致这种情况发生...


一般来说,我建议您忽略BiDi问题,原因有两个:

  1. 使用rtl的国家的人们通常拥有能够很好处理它的设备,如果不行,那就是他们的问题。

  2. 为一个设备修复BiDi会导致其他设备无法遵守。这是一年前做的事情,幸运的是开发人员最终停止了这个错误。


  1. 那现在所有设备都有问题了吗?如果每个运营商和制造商都有自己的实现,我该如何依赖它们呢?
  2. 你说的不需要是什么意思?比如说,如果我有一个图标紧贴着文本,旁边还有另一个图标,那么排序应该颠倒。
  3. 由于一些设备上的文本未对齐,仅进行翻译是不够的。
  4. 它是用来做什么的?我该如何使用它?
- android developer
  1. 没有那么多。ICS 已经内置支持了。许多 Gingerbread 也有它。还有一些 hack 存在来解决它。
  2. 在这种情况下,您应该为 RTL 语言构建单独的布局。
  3. 我不确定。
- skoperst
  1. 真的吗?你如何在ICS上使用它?
  2. 根据你所写的,资源中没有这样的东西。
- android developer
  1. 你不需要这样做,带有双向文本的字符串会被正确呈现。
  2. 没有layout-rtl,但你可以将固定布局放在layout-ar、layout-iw等中。希望现在更清楚了。
- skoperst
  1. 好吧,至少在Galaxy Nexus上不是这样。
  2. 那我需要收集所有RTL语言并给它们相同的布局(或类似的东西)吗?这不是一个很好的解决方案。
  3. 那么我写的方法的目的是什么?它们是用来做什么的?
- android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接