2012-06-09 2 views
32

Я хочу написать текст в (справа налево, например, арабском) в TextView. Но я хочу, чтобы направление написания текста было справа налево. gravity:right выравнивает текст только справа. Я хочу оправдывать текст справа налево (чтобы слова и цифры отображались в порядке, указанном в строке). как ?Как сделать направление текста справа налево

+1

Я считаю, что это ответ на ваш вопрос. Он помечен как правильный ... Я не проверял его, чтобы убедиться, что он действительно прав, но похоже, что он должен работать. http://stackoverflow.com/questions/6302221/android-setting-problem-with-textview-for-hebrew-text –

+1

Как установить Попробуйте добавить символ RIGHT-TO-LEFT MARK (\ u200F)? такой вот >> tv.setText ("\ u200F Мой арабский текст"); – Adham

+0

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

ответ

34

Просто поместите это свойство в вашем TextView и все будет просто отлично тренировки он автоматически определит ваш текст и изменить соответствующим образом

android:textDirection="anyRtl" 
+0

показывает этот код – Exceptional

+0

@ Исключительно, какая ошибка вы получаете? – RaedMarji

+0

все в порядке ,,,, показало ошибку с ADT <20 – Exceptional

15

Слишком поздно, но android:gravity="right" работал.

+1

это испортит смешанный текст, нумерацию, брекеты и т. д. определенно использовать андроид: gravity = "right"/смотреть: http://android-developers.blogspot.co.il/2013/03/native-rtl-support-in-android-42.html –

+0

Can скажите, почему текстовое направление не будет работать? –

3

Попробуйте использовать

textview.setTextDirection(View.TEXT_DIRECTION_RTL); 

или

textview.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 
+1

Работает хорошо! Начиная с api 17 – Danielson

40

Другой умный способ, который может быть использован в более старых версиях Android и может быть использован в любом месте строки, так что удобней даже в последней версии Android, должен включать в себя знак справа налево или даже знак слева направо в строке, когда это необходимо:

left-to-right mark: &lrm; or &#x200e; (U+200E) 
right-to-left mark: &rlm; or &#x200f; (U+200F) 

Вот как это вниз:

String rtl = "Hello \u200F(سلام)"; 

Хорошая вещь об этом методе, что вы можете даже использовать его после пунктуации как ({[,!, которые расположены неправильно неправильно! примеры:

سلام! // wrong position 
سلام!‏ // right position by adding RLM after ! 

Посмотрите, как ! правильно позиционируется во второй строке, на самом деле после него есть RLM, и вы можете скопировать его, даже если он невидим.

Вторая хорошая вещь, которую вы видели, заключается в том, что вы можете использовать этот метод (эти коды символов) в любой системе, которая поддерживает RTL, например, браузеры, слово и т. Д.

+1

Это сделало трюк. Хорошая работа. Любой побочный эффект? –

+1

@SaeedNeamati Эти символы добавляются в UTF именно для этой цели, поэтому, если механизм рендеринга уважает их, побочного эффекта не будет, что имеет место в android. Единственное, что в некоторых шрифтах для этих кодов существует глиф, и они отображаются при использовании этих символов. вы должны удалить их глифы, используя некоторые инструменты редактора шрифтов, такие как создатель шрифтов. – Ali

+1

блестящий спасибо bro –

2

попробовать это, как он работал для меня android:textDirection="rtl"

0

просто добавить свой собственный опыт работы с такими вопросами. в моем случае в дополнение к предложенным решениям я также должен был заменить английский "символ с RTL (в моем случае еврейски) представление такого характера"

5

В случае обычного текста редактирования это будет работать

 android:textDirection="rtl" 

Но в случае полей пароля этого не достаточно, то следить за этим,

 android:textDirection="rtl" 
    android:gravity="right" 
+0

Для меня было важно использовать 'android: textDirection =" anyRtl "' вместо того, чтобы просто просто использовать rtl для вашего предложения. –

7

андроида: textDirection = «локаль»

// установить эту строку в XML для TextView.

+0

работал для меня для арабских текстов –

+0

и устанавливает текст как для арабского ... myTextView.settext ("\ u200F" + "text"). –

1

Добавьте их в свой EditText:

android:gravity="right" 
android:textDirection="rtl" 

PS: android:textDirection требует уровня 17

0

API Используя атрибуты, как показано ниже в моем XML-коде странно я получил право на левый текст с правильной пунктуацией. Но это не является идеальным решением для мульти текста языка:

android:textDirection="ltr" 
android:gravity="right" 

установка LTR исправляет проблемы пунктуации, как с точки на правой стороне, а не слева.

атрибут гравитации делает поток текста справа налево.

Смежные вопросы