如何将文本方向从右到左?

68

我想在TextView中写从右到左的语言(如阿拉伯语)文本。但我想将文本编写方向从右到左。 gravity:right将仅使文本对齐到右侧。我想使文本从右到左对齐(以让单词和数字按输入顺序显示在同一行中)。如何实现?


1
我相信这回答了你的问题。它被标记为正确...我还没有测试过以验证它是否*确实正确,但看起来应该可以工作。https://dev59.com/N1jUa4cB1Zd3GeqPOBrW - Yevgeny Simkin
2
如何设置尝试添加从右到左标记字符(\u200F)?例如:tv.setText("\u200F My Arabic text"); - Adham
我认为是这样的,就像我说的那样,我还没有尝试过,但那似乎是正确的方法。 - Yevgeny Simkin
12个回答

68

另一种聪明的方式,可用于旧版Android,并且可在字符串中的任何位置使用,因此即使在最新版本的Android中也更加方便,就是在需要时在字符串中包含从右到左标记或甚至从左到右标记

left-to-right mark: ‎ or ‎ (U+200E)
right-to-left mark: ‏ or ‏ (U+200F)

这就是它的操作方法:

String rtl = "Hello \u200F(سلام)";

这种方法的好处是即使出现了标点符号,比如 (,{,[,! 等放置不正确,你仍然可以使用它!例如:

سلام! // wrong position
سلام!‏ // right position by adding RLM after !

看一下是如何正确地放置在第二行的,实际上在它后面有一个RLM,即使它是看不见的,你也可以复制粘贴它。

正如您所看到的第二个好处是,您可以在支持RTL的任何系统中使用此方法(这些字符代码),例如浏览器、Word等。


2
@SaeedNeamati 这些字符被添加到 UTF 中,就是为了这个目的,只要呈现引擎尊重它们,就不会有任何副作用,在 Android 中也是如此。唯一的问题是,在某些字体中,存在这些代码的表示符号,当使用这些字符时,它们会显示出来。您可以使用一些字体编辑工具(如字体创建器)删除它们的符号。 - Ali
1
救命之恩。谢谢。 - Syeda Zunaira

52

只需要将这个属性放入你的TextView中,一切都会很好地解决,它会自动检测你的文本并做出相应的改变。

android:textDirection="anyRtl"

5
“textDirection”属性仅在API级别17及以上版本中使用(当前最低版本为13)。 - Iman Marashi
8
如果上述方法无效,请尝试使用android:textAlignment="viewStart" - My House

21

虽然有点晚了,但是 android:gravity="right" 起作用了。


1
一定要使用android:gravity="right" /请参见: http://android-developers.blogspot.co.il/2013/03/native-rtl-support-in-android-42.html - Assaf S.
如果你使用英文文本,会有影响。 - undefined

19

将这行代码放入XML中的textview中:

 android:textDirection="locale"

并将文本设置为阿拉伯语... myTextView.settext("\u200F"+"文本"). - arshad shaikh
我有专门为阿拉伯设计的XML布局。 - arshad shaikh
对我来说,所有的阿拉伯文本都能正确地从右到左显示。但是当文本以英语单词开头(其余文本为阿拉伯语)时,它会从左到右显示。 android:textDirection="locale" -> 这行代码解决了我的问题。谢谢! - Nayan

17

尝试使用

 textview.setTextDirection(View.TEXT_DIRECTION_RTL);
或者
 textview.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);

有什么区别? - gumuruh

7
使用 android:layoutDirection="rtl"android:textAlignment="viewStart" 来使文本视图从右到左显示。

7
在正常编辑文本的情况下,这将起作用。
      android:textDirection="rtl"

但是,在密码字段的情况下,这还不够,需要按照以下步骤处理:

     android:textDirection="rtl"
     android:gravity="right"

2
对我来说,关键是使用android:textDirection="anyRtl"而不仅仅是按照您的建议使用rtl - antonis_st

3
将以下内容添加到您的editText中:
android:gravity="right"
android:textDirection="rtl"

PS: android:textDirection需要API 17级别支持。


3

我建议您尝试这个方法,因为它对我有效:android:textDirection="rtl"


0

TextView的最佳文本方向,不要使用layoutDirection

  <TextView
     android:id="@+id/viewCountTv"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textDirection="anyRtl"
     android:gravity="center"/>

你能提供更多关于为什么不使用 layoutDirection 的信息吗? - Juan M. Rivero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接