希伯来文和普通文字没有正确显示

时间:2016-09-08 04:44:10

标签: android sqlite android-studio right-to-left hebrew

我正在尝试混合使用希伯来语和普通文本,文本来自SQLite数据库,并显示在listview中,该列表视图从Assets文件夹中的数据库中提取。

我想显示以下内容:

'אנאאנא - Ek是,是的,我们是Wie Ek,是,sal wees。“

但它显示为:

“.Ek是,是的,我们是Wie Ek,是,sal wees - אנאאנא'

当希伯来语文本介于其他普通文本之间时,它很好:

'他说אנאאנא - 我,是,我将是谁,是,将来。“

当listview项目以希伯来语开头时,文本才会混淆。

我试过了:

'< \ U + 200f>אנאאנא< \ U + 200f> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'< \ U200f>אנאאנא< \ U200f> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'\ U200fאנאאנא\ U200f - Ek is,was we wees Wie Ek is,was,sal wees。“

'(\ U200f)אנאאנא(\ U200f) - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'< \ U + 202b>אנאאנא< \ U + 202b> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'< \ U202b>אנאאנא< \ U202b> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'\ U202bאנאאנא\ U202b - Ek is,was,sal wees Wie Ek is,was,sal wees。“

'(\ U202b)אנאאנא(\ U202b) - Ek is,was,sal wees Wie Ek is,was,sal wees。“

'< \ U + 202e>אנאאנא< \ U + 202e> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'< \ U202e>אנאאנא< \ U202e> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

'\ U202eאנאאנא\ U202e - Ek是,是的,我们是Wie Ek,是,sal wees。“

'(\ U202e)אנאאנא(\ U202e) - Ek is,was,sal wees Wie Ek is,was,sal wees。“

但所有内容都会显示如下代码: (我不想看代码)

'< \ U + 200f>אנאאנא< \ U + 200f> - Ek是,是的,我觉得Wie Ek,是,sal wees。“

我已经在清单中尝试了android:supportsRtl =“true”,这只会影响我案例中的文本分配,而不会影响文本。

4 个答案:

答案 0 :(得分:2)

问题是您在同一个字符串中混合了rtl和ltr文本。系统查看要显示的字符串,并看到它以希伯来语开头。所以它在RTL模式下启动它。然后看到英文文本。所以它切换到LTR。结果就是你所看到的。在混合这样的语言时,您需要输入显式的unicode ltr和rtl标记,以确保正确处理它。有关ltr标记的信息,请参阅https://en.wikipedia.org/wiki/Left-to-right_mark

答案 1 :(得分:1)

...的sooo 这最终对我有用....

textview.setTextDirection(View.TEXT_DIRECTION_LTR);

请注意我的问题就像我说的那样,我正在从数据库中读取数据并且没有显示字符串,所以这段代码强制从左到右读取所有数据,如果我不使用这一行,它会选择希伯来字符作为RTL文本,并希望将整个结果显示为RTL。

感谢所有的帮助!我有很多阅读和学习过程!

答案 2 :(得分:0)

在这里看到答案......

Ted Hopp answer

我正在使用\ u200e从右到左

  

将你的字符串带入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

  

如果你想要数据库你想要的我想添加一些带有数组数据的demo你可以做这些类型与数据库值一起工作

 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

答案 3 :(得分:-1)

android:supportsRtl="true"

意味着您希望从右到左支持阿拉伯语,希伯来语语言。这是从RTL开始从右到左,当系统得到语言是希伯来语时,它从右边开始。根据我的建议你需要定义你真的需要在你的应用程序中支持RTL。否则请设置android:supportsRtl="false",使其从左到右开始。