希伯来文和普通文本显示不正确

Hebrew and normal text not displaying right

我正在尝试混合显示希伯来文和普通文本,文本来自 SQLite 数据库并显示在列表视图中,该列表视图是从我的数据库中的“资产”文件夹中提取的。

我要显示以下内容:

‘אנא אנא - Ek is, was, sal wees Wie Ek is, was, sal wees。”

但显示为:

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

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

‘他说 אנא אנא - 我是,过去是,将来是我,过去是,将来是我。”

仅当列表视图项目以希伯来语开头时,文本才会混淆。

我试过了:

‘<\U+200f>אנא אנא<\U+200f> - Ek is, was, sal wees Wie Ek is, was, sal wees.”

‘<\U200f>אנא אנא<\U200f> - Ek is, was, sal wees Wie Ek is, was, sal wees.”

‘\U200fאנא אנא\U200f - Ek is, was, sal wees Wie Ek is, was, sal wees。”

‘(\U200f)אנא אנא(\U200f) - Ek is, was, sal wees Wie Ek is, was, sal wees.”

‘<\U+202b>אנא אנא<\U+202b> - Ek is, was, sal wees Wie Ek is, was, 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.”

‘(\U202b)אנא אנא(\U202b) - Ek is, was, sal wees Wie Ek is, was, sal wees.”

‘<\U+202e>אנא אנא<\U+202e> - Ek is, was, sal wees Wie Ek is, was, sal wees.”

‘<\U202e>אנא אנא<\U202e> - Ek is, was, sal wees Wie Ek is, was, sal wees.”

‘\U202eאנא אנא\U202e - Ek is, was, sal wees Wie Ek is, was, sal wees。”

‘(\U202e)אנא אנא(\U202e) - Ek is, was, sal wees Wie Ek is, was, sal wees.”

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

‘<\U+200f>אנא אנא<\U+200f> - Ek is, was, sal wees Wie Ek is, was, sal wees.”

我已经在清单中尝试了 android:supportsRtl="true",这只会影响我的文本排列,而不影响文本。

android:supportsRtl="true"

表示您希望从右到左支持阿拉伯语、类似希伯来语的语言。这是从 RTL 从右到左开始的,当系统得到该语言是希伯来语时,根据我的建议,它以 right.As 开头,你需要定义你的应用程序是否真的需要 RTL 支持。否则请设置 android:supportsRtl="false" 使其从左到右开始。

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

在这里查看答案....

Ted Hopp answer

我正在使用 \u200e 从右到左

take your string in 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);

The result as you want

AS you want if you want for database I am adding some demo with the array data you can do these type work with database value

 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]);
            }
        }

The result

太... 这终于对我有用....

textview.setTextDirection(View.TEXT_DIRECTION_LTR);

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

谢谢大家的帮助!在这个过程中我有很多阅读和学习!