Unicode组合字符是自己打印的(不与前一个字符组合)

时间:2013-05-31 14:42:14

标签: java android unicode textview unicode-string

给定资源

<string name="squareRoot">&#x221A;x&#x0305;</string>

和java代码

System.out.println("unicode: " + getString(R.string.squareRoot));

输出

enter image description here

上划线(x0305)不应该位于'x'之上吗? 当我尝试使用相同的字符串资源作为textView的文本时,上线根本不显示(它占据空间,我知道这是因为我试图交换'x'和上划线并在'x之前得到一个空格“)

2 个答案:

答案 0 :(得分:2)

我不认为Android字体有U + 0305的字形。 为了确认(或不是)这个理论,你可以尝试嵌入一个你知道它适用于你的应用程序并尝试使用它的喜欢。

但即使字体具有字形,文本布局引擎也可能不够聪明,无法做正确的事情。

答案 1 :(得分:2)

是,U + 0305 COMBINING OVERLINE应该会在上一个字符上方放置一个上划线。但是,有几个原因可能会或多或少地失败。首先,组合字符的放置需要良好的渲染引擎(例如,如果前面的字符是大写字母X,则必须将上线放置得更高)。其次,使用的字体可能缺少U + 0305。这可能会或可能不会导致使用后备字体,可能是在风格上与基本字体不相似的字体。第三,U + 0305并非真正设计用作与方根符号一起使用的vinculum,因此根据字体的不同,它可能看起来不合适。

在纯文本中,通常最好避免尝试使用vinculum生成“智能”平方根表达式。仅使用√x或(x是与运算符的表达式)√(x)更安全且完全符合数学标准ISO 80000-2。