Android: gravity = "right" не работает на всех устройствах для арабского и других языков RTL

У меня есть приложение для 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, а на других нет.

Чтобы быть более конкретным, я тестировал приложение на многих 2.3.3 устройствах Android, и арабский текст выравнивается вправо. Однако на других 2.3.3 устройствах арабский текст выравнивается влево (что неверно).

Когда я изменил андроид: gravity = «right» to android: gravity = «left» проблема переместилась со второй группы устройств на первую.

Поэтому мой вопрос заключается в том, как я могу решить эту проблему особенно тем, что, насколько я знаю, нет возможности локализовать макеты на основе номера модели устройства.

Заранее благодарю за любое руководство, потому что я полностью потерян. 🙁

ОБНОВИТЬ:

Я искал «Как правильно выровнять арабский язык на всех версиях Android?» Но ничего не работает на всех моих тестовых устройствах. Любые предложения, пожалуйста? Я уверен, что для выравнивания арабского текста на Android существует оптимальный подход.

ОБНОВЛЕНИЕ 2:

Я попытался использовать WebView вместо TextView для правильного выравнивания арабского языка с использованием стилей CSS. Однако арабский текст отображается в WebView как странные символы.

Вот код:

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

Странно, что текст арабских веб-сайтов отображается правильно. Так в чем проблема? 🙁

Solutions Collecting From Web of "Android: gravity = "right" не работает на всех устройствах для арабского и других языков RTL"

Это ожидаемое поведение. Вы не можете использовать gravity="right" , но gravity="end" вместо этого, та же самая идея, которую вы примените к gravity="left" которую вы можете использовать gravity="start" , а также layout_marginStart вместо layout_marginLeft

Таким образом, Android поместит текст в начальную ориентацию в зависимости от местоположения. (Для нас, американцев, мы начинаем писать слева, и мы заканчиваем справа , но арабианцы начинаются справа и слева слева ).

Вы можете получить макет / текстовые указания с помощью метода getLayoutDirectionFromLocale(null) , это вернет View.LAYOUT_DIRECTION_LTR (слева направо) или View.LAYOUT_DIRECTION_RTL (справа налево, как и арабский).

Больше информации вы можете проверить здесь

Измените свой текст в макете на это ….

 <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" /> 

Вы можете изменить это по-другому также …. Вы можете внести изменения в класс активности. Далее … пусть ваш TextView с заголовком id отображается в классе активности с объектом TextView с именем «tv», который вы Может сделать это правильно, написав это.

  tv.setGravity(Gravity.RIGHT); 

Но в обоих случаях ширина макета ширины должна быть «fill_parent». Если вы этого не сделаете и сохраните «wrap_content», тогда нет места для перемещения текста … все выравнивания (в центре, влево, вправо …)оставаться прежним…..

Если оба этих участника работают, то я предпочел бы, чтобы вы использовали табличный макет и сохраняли в нем текст.

Попробуйте поместить свой текст в отдельный LinearLayout и установить, что свойства макета подобны: android: layout_gravity = "center_vertical" и android: orientation = "vertical" android: gravity = "right"

Note: не указывать layout_gravity текста.

надеюсь это поможет! Это сработало для меня.

Вы также можете попробовать решение, предлагаемое здесь: