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

Я хочу отобразить следующее:

‘אנא אנא - Ek is, was, sal wees Wie Ek is, was, sal wees».

Но отображается как:

».Эк есть, был, сал вис Ви Эк есть, был, сал вис - אנא אנא‘

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

«Он говорит: אנא - Я, был, буду, Кто я, был, буду».

Текст смешивается только тогда, когда элемент списка начинается с иврита.

Я пробовал:

‘<\ U + 200f> אנא אנא <\ U + 200f> - Эк есть, был, сал Ви Эк есть, был, сал вис».

‘<\ U200f> אנא אנא <\ U200f> - Эк есть, был, сал wees Ви Эк есть, был, sal wees».

‘\ U200f אנא אנא \ U200f - Эк есть, был, sal wees Ви Эк есть, был, sal wees."

‘(\ U200f) אנא אנא (\ U200f) - Эк есть, был, сал вис, Ви Эк есть, был, сал вис."

‘<\ U + 202b> אנא אנא <\ U + 202b> - Эк есть, был, сал Ви Эк есть, был, сал вис».

‘<\ U202b> אנא אנא <\ U202b> - Эк есть, был, сал Ви Эк есть, был, сал вис».

‘\ U202b אנא אנא \ U202b - Эк есть, был, сал вис Ви Эк есть, был, сал вис."

‘(\ U202b) אנא אנא (\ U202b) - Эк есть, был, сал вис, Ви Эк есть, был, сал вис."

‘<\ U + 202e> אנא אנא <\ U + 202e> - Эк есть, был, сал Ви Эк есть, был, сал вис».

‘<\ U202e> אנא אנא <\ U202e> - Эк есть, был, сал Ви Эк есть, был, сал вис».

«\ U202e אנא אנא \ U202e - Эк есть, был, сал вис, Ви Эк есть, был, сал вис».

‘(\ U202e) אנא אנא (\ U202e) - Эк есть, был, сал вис, Ви Эк есть, был, сал вис."

Но все отображается с такими кодами, как: (Я не хочу видеть коды)

‘<\ U + 200f> אנא אנא <\ U + 200f> - Эк есть, был, сал Ви Эк есть, был, сал вис».

Я пробовал android: supportsRtl = "true" в манифесте, в моем случае это влияет только на выравнивание текста, а не на тексты.

0
FDupie 8 Сен 2016 в 07:44

4 ответа

Лучший ответ

Тааак ... Это наконец сработало для меня ....

textview.setTextDirection(View.TEXT_DIRECTION_LTR);

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

Спасибо за помощь! Я много читал и узнал в процессе!

1
FDupie 17 Сен 2016 в 20:59

Проблема в том, что вы смешиваете текст rtl и ltr в одной строке. Система просматривает отображаемую строку и видит, что она начинается с иврита. Итак, он запускает его в режиме RTL. Затем он видит английский текст. Таким образом, он переходит на LTR. Результат - это то, что вы видите. При смешивании языков, подобных этому, вам необходимо указать явные знаки Unicode ltr и rtl, чтобы гарантировать правильное обращение с ними. См. https://en.wikipedia.org/wiki/Left-to-right_mark для информации о знаках ltr.

3
Gabe Sechan 8 Сен 2016 в 05:09
android:supportsRtl="true"

Означает, что вам нужна поддержка справа налево для арабского и иврита. который начинается с RTL Справа налево, когда система получает этот язык как иврит, он начинается справа. В соответствии с моим предложением вам необходимо определить, действительно ли вам нужна поддержка RTL в вашем приложении. в противном случае установите android:supportsRtl="false" так, чтобы его начало слева направо.

-1
Himesh goswami 8 Сен 2016 в 05:01

Смотрите ответ здесь ....

Тед Хопп ответ

Я использую справа налево

возьмите свою строку в string.xml

<string name="Yourstring">\u200e שלום</string>


 TextView text2=(TextView)findViewById(R.id.text2);

 String str= getResources().getString(R.string.Yourstring)+" is the same as hello";
 text2.setText(str);

Результат как хотите

enter image description here

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

 String[] str_array={"שלום is the same as hello","שלום is the same as hello","שלום is the same as hello","שלום is the same as hello"};


        TextView text1=(TextView)findViewById(R.id.text1);
        TextView text2=(TextView)findViewById(R.id.text2);
        TextView text3=(TextView)findViewById(R.id.text3);
        TextView text4=(TextView)findViewById(R.id.text4);



        String str="";

        for(int i=0;i<str_array.length;i++)
        {
            if(i==0)
            {

              // before text you want than do this
                text1.setText(str.concat("\u200e")+str_array[i]);
            }
            else if(i==1)
            {
                // add this for end of string

                text2.setText(str_array[i].concat("\u200e"));
            }
            else if(i==2)
            {
           // before text you want than do this
                text3.setText(str.concat("\u200e")+str_array[i]);
            }
            else if(i==3)
            {
           // before text you want than do this
                text4.setText(str.concat("\u200e")+str_array[i]);
            }
        }

Результат

enter image description here

0
Community 23 Май 2017 в 12:19