解决Android 自动换行不准确问题

1,073 阅读1分钟

通过tvPaint.measureText逐字测量自行换行 解决Android 自动换行不准确问题

    /**
     * 逐字测量 解决Android 自动换行不准确问题
     * @param content 文本内容 支持String (spannableString 暂时还有第二行span丢失的问题)
     * @param maxWidth 文字最大显示宽度
     */
    private void autoSplitText(TextView tv, CharSequence content, float maxWidth) {
        Paint tvPaint = tv.getPaint();
        if (tvPaint.measureText(content, 0, content.length()) <= maxWidth) {
            tv.setText(content);
        } else {
            //逐字符测量,在超过可用宽度的前一个字符处插入\n手动换行
            SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
            float lineWidth = 0;
            int lastSubIndex = 0;
            for (int index = 0; index < content.length(); index++) {
                char ch = content.charAt(index);
                lineWidth += tvPaint.measureText(String.valueOf(ch));
                if (lineWidth > maxWidth) {
                    spannableStringBuilder.append(content.subSequence(lastSubIndex, index - 1));
                    spannableStringBuilder.append("\n");
                    lastSubIndex = index - 1;
                    lineWidth = 0;
                }
            }
            spannableStringBuilder.append(content.subSequence(lastSubIndex, content.length()));
            tv.setText(spannableStringBuilder);
        }

    }