Android 4.3增加了对RTL(从右到左)语言的大量支持,例如希伯来语和阿拉伯语。
即使有“textDirection”,“layoutDirection”和“gravity”,我也找不到通知构建器的等价物,即使在兼容性库中也找不到。
这意味着如果一起有希伯来语和英语单词,则顺序错误。 例如(为简单起见,我用英文写作):
而不是“X叫Y”,而不是“Y叫X”(假设“被称为”是希伯来语中的一个单词),因为该字符串应该采用以下格式:
<string name="notification">%1$s called %2$s</string>
注意:X和Y可以是RTL或LTR字(和偶数)。
要求是在希伯来语中,右边的单词应该是X,然后是“被叫”(当然是希伯来语),然后是左边的Y.正如我试图在英语类比例中所示,它恰恰相反。
一个。我试图搜索文档,我发现的是我可能需要覆盖布局,但这不是一个好的解决方案。原因:
湾我还试图调查哪些特殊字符会强制文本方向不同,并且通过在显示的文本的开头和结尾添加'\ u200f'来起作用,但它有一些缺陷:
以下是示例代码:
/** prepares a string to be shown in a notification, so that it will be shown even on RTL languages */
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static String prepareNotificationText(final Context context, final String text) {
if (VERSION.SDK_INT < VERSION_CODES.JELLY_BEAN_MR1)
return text;
final boolean isRTL = context.getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
if (!isRTL)
return text;
return '\u200f' + text + '\u200f';
}
℃。我也可以在字符串中的“1”和“2”之间切换,但这并不能处理所有情况,而且对翻译者来说更加困惑。
有没有办法让通知构建器正确处理文本(对于通知和TickerText)?
任何方式调整它而不实际为通知(或更改字符串)创建全新的布局,这可能与Android的原生样式不同?
处理这类事情的官方方式是什么?