我认为Android的bidi分析算法存在一些缺陷。Unicode 有两个不可见的强方向性字符,可能有助于解决这些问题:
- U+200E - 从左到右的标记
- U+200F - 从右到左的标记
对于数字顺序问题,请尝试在数字序列的两侧放置从左到右的标记(U+200E)。
Unicode 还具有以下双向格式代码:
- U+202A - 从左到右嵌入
- U+202B - 从右到左嵌入
- U+202C - 弹出方向格式(取消之前的嵌入或覆盖)
- U+202D - 从左到右覆盖
- U+202E - 从右到左覆盖
对于希伯来语文本中英文片段的问题,可能就像在英文之前放置一个从右到左的标记一样简单。(Android 的算法可能会认为段落是从左到右的,因为第一个字符是英文。)如果这不起作用,也许可以尝试使用一些格式代码组合来包围选定的文本。(我会尝试从左到右嵌入,然后是弹出定向格式。我还会尝试在所有内容周围从右到左嵌入,并结合选择性显式从右到左嵌入。)
这些应该影响文本布局的方式由 Unicode Bidirectional Algorithm Unicode Standard Annex #9定义。但是,如果 Android 的实现被破坏了(我怀疑是这样),你能做的最好的就是反复试验,直到你得到正确的结果。祝你好运。
编辑
就代码而言,这是一个如何在 Java 中完成的示例:
String text = "גרסה \u200e2.100\u200e זמינה";
在 XML 中,它可能是:
<string name="update_available">גרסה ‎2.100‎ זמינה</string>