希伯来文和普通文本显示不正确
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。
谢谢大家的帮助!在这个过程中我有很多阅读和学习!
我正在尝试混合显示希伯来文和普通文本,文本来自 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。
谢谢大家的帮助!在这个过程中我有很多阅读和学习!