【发布时间】:2016-03-20 09:48:15
【问题描述】:
我有一个简单的 TextView,它应该有 android:gravity="left" 用于 ltr 系统语言环境,android:gravity="right" 用于 rtl 系统语言环境。
显而易见的选择是:android:gravity="start",然后例如英文文本将始终为左对齐,而希伯来文则为右对齐。
这是android:gravity="start" 的样子:
LTR 语言环境:
| לורם| // incorrect
|test | // correct
RTL 语言环境:
| לורם| // correct
|test | // incorrect
应该是这样的:
LTR 语言环境:
|לורם |
|test |
RTL 语言环境:
| לורם|
| test|
是否可以在不使用带有修改过的 xml 文件的 layout-ldrtl 文件夹的情况下做到这一点?这会使开发变得非常复杂,因为我必须两次编辑大量布局文件......
edit: API 17+ 的解决方案就足够了。 我编写了系统语言环境,但实际上我允许用户像这样更改应用程序语言:
Configuration configuration = context.getResources().getConfiguration();
configuration.setLayoutDirection(selectedLocale);
configuration.locale = selectedLocale;
context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());
因此,如果将此语言环境考虑用于 rtl ltr 选择,那就太好了。
【问题讨论】:
-
英文文本从左到右呈现我认为是重力启动
-
是的,这正是我的问题。设置 RTL 语言环境后,是否有强制 RTL 的方法?
-
试过添加 textdirection 属性吗?但我认为它仅适用于 api 17+
-
@Bhargav 好建议。如果我将它设置为
android:textDirection="locale"它与系统区域设置对齐,但不是“应用程序区域设置”,请参阅我的编辑...抱歉造成混淆,我试图简化... -
我注意到
textDirection的另一个问题是,如果您使用android:ellipsize并强制RTLtextDirection,“...”将放在左侧,即使是英文...这看起来完全错误。
标签: android layout right-to-left