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" に変更すると、問題はデバイスの 2 番目のグループから最初のグループに移行しました。

したがって、私の質問は、特にデバイスのモデル番号に基づいてレイアウトをローカライズする方法がないことを知っている限り、この問題をどのように解決できるかということです。

完全に迷っているので、ご指導をよろしくお願いします。:(

アップデート:

「すべての Android バージョンでアラビア語を正しく配置する方法は?」について検索しました。しかし、すべてのテストデバイスで何も機能していませんでした。何か提案はありますか?Android でアラビア語のテキストを配置するためのベスト プラクティス アプローチがあると確信しています。

更新 2:

CSSスタイルを使用してアラビア語を正しく配置するために、TextViewの代わりにWebViewを使用しようとしました。ただし、アラビア語のテキストが WebView に奇妙な文字として表示されます。

コードは次のとおりです。

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

奇妙なことに、アラビア語の Web サイトのテキストは正しく表示されます。だから問題は何ですか?:(

4

4 に答える 4

5

これは予期される動作です。を使用することはできませんgravity="right"が、代わりに、を使用するgravity="end"場合と同じ考え方を適用できます。gravity="left"gravity="start"layout_marginStartlayout_marginLeft

このように、Android は場所に応じてテキストを「開始」方向に配置します。(私たちアメリカ人にとっては、から書き始め終わりますが、アラビア人はから始め終わります)。

メソッドでレイアウト/テキストの方向を取得できますgetLayoutDirectionFromLocale(null)。これはView.LAYOUT_DIRECTION_LTR(左から右) またはView.LAYOUT_DIRECTION_RTL(アラビア語のように右から左) を返します。

ここで確認できる詳細情報

于 2014-01-30T18:41:39.157 に答える
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

レイアウトのテキストビューをこれに変更してください....

<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 に答える