android:gravity =“right”不适用于阿拉伯语和其他RTL语言的所有设备

时间:2012-04-16 16:42:17

标签: java android android-layout arabic right-to-left

我有一个阿拉伯语Android应用程序,这里是XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/greygradientbackground">
<ImageView android:id="@+id/logo"
    android:layout_width="150dp"
    android:layout_height="fill_parent"
    android:scaleType="centerCrop"
    android:layout_margin="5dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true" />
<TextView android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:textColor="#000000"
    android:layout_gravity="center_vertical|right"
    android:gravity="right"
    android:layout_toLeftOf="@id/logo"/>
</RelativeLayout>

问题在于:android:gravity适用于某些Android机型而其他型号则不适用。

更具体地说,我已经在许多2.3.3安卓设备上测试了应用程序,并且阿拉伯语文本正确对齐。但是在其他2.3.3设备上,阿拉伯语文本左对齐(这是错误的)。

当我将android:gravity =“right”更改为android:gravity =“left”时,问题从第二组设备转移到第一组。

所以我的问题是如何解决这个问题,特别是据我所知,没有办法根据设备型号来本地化布局。

提前感谢任何指导,因为我完全迷失了。 :(

更新

我搜索了“如何在所有Android版本上正确对齐阿拉伯语?”但发现我的所有测试设备都没有工作。有什么建议吗?我确信有一种最佳实践方法可以在Android上对齐阿拉伯语文本。

更新2:

我尝试使用WebView而不是TextView来使用CSS样式正确对齐阿拉伯语。但是,阿拉伯语文本在WebView中显示为奇怪的字符。

以下是代码:

mWebView.loadData("<html  dir=\"rtl\">الأسم<body></body></html>", "text/html", "UTF-8");

奇怪的是阿拉伯语网站文本正确显示。所以有什么问题? :(

4 个答案:

答案 0 :(得分:4)

这是预期的行为。您可能不会使用gravity="right",而是使用gravity="end",您应用gravity="left"的相同想法可能会使用gravity="start",而layout_marginStart代替layout_marginLeft {1}}

这样,Android会根据位置将文本置于“开始”方向。 (对我们来说,美国人,我们开始,我们结束 ,但阿拉伯人开始 左侧

您可以使用方法getLayoutDirectionFromLocale(null)获取布局/文字说明,这将返回View.LAYOUT_DIRECTION_LTR(从左到右)或View.LAYOUT_DIRECTION_RTL(从右到左,如阿拉伯语) )。

您可以查看here

的详细信息

答案 1 :(得分:0)

将布局中的textveiw更改为此....

<TextView android:id="@+id/title"

将layout_width更改为“fill_parent”

     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:textSize="16sp"
     android:textColor="#000000"
     android:layout_gravity="center_vertical|right"
     android:gravity="right"
     android:layout_toLeftOf="@id/logo"
/>

您也可以通过其他方式更改内容....您可以在活动类中进行更改..如下所示...让您的带有ID标题的TextView在活动类中使用名为“tv”的TextView对象进行映射“你可以通过写这个来使它正确对齐。

 tv.setGravity(Gravity.RIGHT);

但在这两种情况下,宽度布局宽度应为“fill_parent”.. 如果你不这样做并保持“wrap_content”,那么文本就没有空间可以移动......所有的对齐方式(中心,左边,右边......)都保持不变.......

如果这两个都不合适......那么我希望你使用表格布局并保留文本视图....

答案 2 :(得分:0)

尝试将textview放在单独的LinearLayout中,并设置布局属性likethis:  android:layout_gravity =“center_vertical”和android:orientation =“vertical”            机器人:比重= “右”

注意:不要指定textview的layout_gravity。

希望这有帮助!它对我来说很好。

您也可以尝试此处提供的解决方案:Android Arabic text aligment

答案 3 :(得分:0)

实现此类行为的另一种解决方案:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layoutDirection="ltr"        
        android:layout_weight="1"
        android:gravity="end"
        android:padding="16dp"
        android:text="@string/locale_switch_btn" />
</LinearLayout>

请注意,要正确 gravity =“end”对齐,在rtl区域设置中应设置属性:

<强>机器人:的layoutDirection = “LTR”