RTL对齐不适用于长文本

时间:2015-04-08 11:40:58

标签: android right-to-left text-alignment

我正在制作一个包含英语和希伯来语(用于从右到左)文本的布局,在不同的视图中。当一行希伯来文本超出一定长度时,它会从左到右书写(我认为这与长度有关,因为它看起来很好用较短的文字,当我在平板电脑而不是手机上显示它时)。 相关视图如下所示:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:gravity="center"
    android:textDirection="rtl"
    android:text="@string/tx_middle_text"
    android:textSize="@dimen/big_text_dp" />

,字符串在strings.xml中定义,如下所示:

<string name="tx_middle_text">טקסט בעברית</string>

(我已经替换了原始文本,长度为50个字符,完全由希伯来字母和白色空格组成。)
请注意,文本具有rtl属性。我尝试用anyRtl替换它,我尝试将重力改为“正确” - 两者都没有帮助 我需要将文本保留在一行中并且如果不适合则用省略号剪切 - 就像它一样,这就是发生的事情,但文本是从左到右书写的。
我该如何解决这个问题?

编辑:对于临时解决方案,我将较短的字符串作为较小布局的替代资源(只要文本在给定设备上的长度小于一行,它就可以工作),但我仍然喜欢知道是否有一般的解决方案。

2 个答案:

答案 0 :(得分:1)

系统会根据字符自动检测RTL。即对于阿拉伯字符,文本将从右到左绘制。

这是关于如何绘制我的微调器的示例。对于此TextView:

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner_item"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="15sp"
    android:gravity="center_vertical|start"
    android:textColor="@color/spinner_filter_text"
    android:ellipsize="end"
    android:singleLine="true"
    android:paddingStart="20dp"
    android:paddingEnd="20dp"/>

这些字符串:

<string name="all_categories">All Categories</string>(值)

enter image description here(values-ar)

结果是:

enter image description here enter image description here

如果我用:

修改TextView
android:layout_width="100dp"

结果是:

enter image description here enter image description here

我觉得很好......请注意,在strings.xml中,ar语言的字符串方向是错误的,但Android正在正确绘制它。我想这是因为一些Android Studio设置。

答案 1 :(得分:0)

android:singleLine="true"替换为
android:lines="1" android:maxLines="1"

还添加android:ellipsize="end"