现在的位置: 首页 > 综合 > 正文

android的TextView在设置ellipsize可能显示方框的问题

2019年07月29日 ⁄ 综合 ⁄ 共 687字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.