我正在尝试在应用程序中支持RTL语言环境,但是遇到了以下问题。现在我说问题,但是由于我对RTL语言环境不熟悉,这甚至可能不是问题,所以这里就解决了。
下面是3个文本视图。请注意,以下输出是通过dev选项强制启用RTL的。
英语LTR测试
强制执行英语RTL测试
我感到奇怪的是,即使我说android:gravity="start"
就像它如何使用padding和margin等,它也没有向右对齐,所以我查看了其他答案并遇到了android:textDirection="locale"
。
使用文本方向语言环境强制进行英语RTL测试
现在,这在LTR和RTL上均正确镜像,但是随后我注意到标点符号具有以下行为。不管这是否正确,这引起了人们的关注,因为我正在与强制使用RTL的Google Play商店,Facebook和Whats App进行比较,并且在查看标点符号的段落时没有看到这一点,这使我相信自己做错了事。 >
完整版式代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:text="@string/test_one"
android:textColor="@android:color/black"
android:textDirection="locale"
android:textSize="24sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="start"
android:text="@string/test_two"
android:textColor="@android:color/black"
android:textDirection="locale"
android:textSize="24sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="start"
android:text="@string/test_three"
android:textColor="@android:color/black"
android:textDirection="locale"
android:textSize="24sp" />
</LinearLayout>
其他代码
以下设置在我的清单文件中
android:supportsRtl="true"
这是我的琴弦
<string name="test_one">Good Job. You did well!</string>
<string name="test_two">3 hours ago</string>
<string name="test_three">Select Option:</string>
请原谅这听起来多么幼稚,并启发我!我希望提供舒适的RTL支持!
答案 0 :(得分:6)
将android:textDirection="locale"
添加到TextView
和android:supportsRtl="true"
即可解决问题。但是,textDirection="locale"
将方向更改为en
或fa
或ar
的语言环境。 ( 取决于设备的语言 )
要清楚起见,它工作正常,因为您在TextView
中输入的文字是LTR
,并且您使用了RTL
方向,看到,它的方向是RTL
,这没有问题。另外,使用android:gravity="start"
可能会迫使它从LTR
开始使用。 (我建议删除android:gravity="start"
,然后让Android(以设备的语言为准)确定哪一个最好)
因此,要测试其是否有效,可以将文本设置为阿拉伯语或波斯语,如下所示:
android:text="این یک تست است"
如果它是从RTL
开始并以"این"
开始的,那么它将按预期工作。