9

我有一个阿拉伯语 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 android 设备上测试了该应用程序,并且阿拉伯文本正确对齐。但是在其他 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

4 回答 4

5

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

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

您可以使用 方法获取布局/文本方向getLayoutDirectionFromLocale(null),这将返回View.LAYOUT_DIRECTION_LTR(left-to-right) 或View.LAYOUT_DIRECTION_RTL(right-to-left, like arabic)。

您可以在此处查看更多信息

于 2014-01-30T18:41:39.157 回答
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”,那么文本就没有空间移动了......所有的对齐方式(中心,左,右...)保持不变.....

如果这两个都不起作用......那么我希望你使用表格布局并将文本视图保留在其中......

于 2012-04-25T07:28:45.900 回答
0

尝试将你的 textview 放在一个单独的 LinearLayout 中,并设置这样的布局属性: android:layout_gravity="center_vertical" 和 android:orientation="vertical" android:gravity="right"

注意:不要指定 textview 的 layout_gravity。

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

您也可以尝试此处提供的解决方案:Android 阿拉伯语文本对齐

于 2012-06-22T07:02:39.337 回答
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>

请注意,为了正确的重力=“结束”对齐,在 rtl 语言环境中您应该设置属性:

安卓:layoutDirection="ltr"

于 2018-01-22T09:28:32.247 回答