如果在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就好了。