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