2013-06-14 3 views
2

По какой-то неизвестной причине, если я ставлю следующую строку:Числа и древнееврейский текст вызывает нежелательные новые линии

15 קמ 

в текстовом режиме, это приводит к новой линии между «15» и «קמ «:

15 
קמ 

Если я заменю„קמ“с„км“, то он работает отлично ...

Примечание: это не произойдет, если часть строковой является ивритом.

Любые подсказки?

+0

Нет новой строки на Galaxy Nexus, показать код. – ozbek

+0

Какой уровень API вы используете, когда видите это? Это на реальном устройстве или эмуляторе? –

+0

Я использую API 10, но мне удалось воспроизвести проблему и в API 15. Это происходит как на реальном устройстве (HTC One X), так и на эмуляторе ... – shaylh

ответ

1

Я также испытал проблему выравнивания TextView, когда я работаю с буквенно-цифровым + арабским текстом в том же текстовом виде, они перестраивают все тексты в порядке слева направо, что приводит к нелепому выводу. Этот тип языковой проблемы на самом деле не является чем-то, что мы можем исправить в прямом подходе.

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

+0

Да, я тоже об этом думал ... Я действительно надеялся, что есть реальное решение, а не только обходное решение ... Хотя это сработает ... – shaylh

+0

Вы пробовали кодировку UTF-8 ... –

+0

@MukeshY Вы имеете в виду shaylh? Если вы думаете, вы должны оставить комментарий по его вопросу. –

0

Попробуйте использовать кодировку UTF-8 для древнееврейского текста, например:

Строка текста = "15 קמ";
text = new String (text.getBytes(), "UTF-8");

0

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

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ellipsize="none" 
    android:text="15 קמ" 
    android:maxLines="1" 
    android:padding="8dp" 
    android:singleLine="true" /> 
2

Я думаю, что древнееврейский интерпретируется RTL (справа налево) в то время как другая часть LTR (слева направо). Учитывая это, TextView должен представлять собой нечто вроде этого:

\LTR 15 \RTL קמ 

Моя логическое предположение, что TextView помещает часть RTL на новой линии, чтобы иметь дело с ерундой иметь обе части на одной и той же линии. Если вы заставляете это полностью RTL, когда языковой стандарт является ивритом, я думаю, что он будет регулировать рендеринг и решить проблему. Я хотел бы предложить вам попробовать добавить «RIGHT-TO-LEFT MARK» характер \u200F в начале строки:

String text="15 קמ"; 
if (hebrew) { 
    text="\u200F"+text; 
} 

Кроме того, кажется, что некоторые шрифты демонстрируют графическую интерпретацию особого характера (пока он не должны). Вероятно, вам придется использовать этот font, чтобы избавиться от него.