如果在android中使用了自定义的字体,则可能会发现在设置了ellipsize之后在…之后(或之前)可能显示一个方框。
其实这个问题出现在这里——Layout.java中
private void ellipsize(int start, int end, int line,
char[] dest, int destoff, TextUtils.TruncateAt method) {
int ellipsisCount = getEllipsisCount(line);
if (ellipsisCount == 0) {
return;
}
int ellipsisStart = getEllipsisStart(line);
int linestart = getLineStart(line);
for (int i = ellipsisStart; i < ellipsisStart + ellipsisCount; i++) {
char c;
if (i == ellipsisStart) {
c = getEllipsisChar(method); // ellipsis
} else {
c = '\uFEFF'; // 0-width space
}
int a = i + linestart;
if (a >= start && a < end) {
dest[destoff + a - start] = c;
}
}
}
请注意看,c = '\uFEFF',这是一个什么字符?在Unicode的定义中,这是一个宽度为0的空格。Android在替换…的时候,把被省略的字符全部变成了'\uFEFF'。如果你的字体不支持这个字符的显示,就会发现方框被显示出来了。
修复这个问题很简单,修改你的字体,把这个字符的宽度设置成0就好了。