FoldText_Java icon indicating copy to clipboard operation
FoldText_Java copied to clipboard

文字换行bugfix

Open WXZNJS opened this issue 4 years ago • 5 comments

修改SpannableFoldTextView类 translateText方法,判断是否超过本行文字最大index

private void translateText(Layout layout, BufferType type) {
    if (layout.getLineCount() > mShowMaxLine) {
        SpannableStringBuilder span = new SpannableStringBuilder();
        int start = layout.getLineStart(mShowMaxLine - 1);
        int end = layout.getLineVisibleEnd(mShowMaxLine - 1);
        int maxLineIndex = end;
        TextPaint paint = getPaint();
        StringBuilder builder = new StringBuilder(ELLIPSIZE_END);
        if (mTipGravity == END) {
            builder.append("  ").append(mFoldText);
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
            float x = getWidth() - getPaddingLeft() - getPaddingRight() - getTextWidth(ELLIPSIZE_END.concat(mFoldText));
            while (layout.getPrimaryHorizontal(end - 1) + getTextWidth(mOriginalText.subSequence(end - 1, end).toString()) < x) {
                if(end >= maxLineIndex){
                    break;
                }
                end++;
            }
            end -= 2;
        } else {
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
        }
        CharSequence ellipsize = mOriginalText.subSequence(0, end);
        span.append(ellipsize);
        span.append(ELLIPSIZE_END);
        addTip(span, type);
    }
}

WXZNJS avatar Sep 04 '20 08:09 WXZNJS

修改SpannableFoldTextView类 translateText方法,判断是否超过本行文字最大index

private void translateText(Layout layout, BufferType type) {
    if (layout.getLineCount() > mShowMaxLine) {
        SpannableStringBuilder span = new SpannableStringBuilder();
        int start = layout.getLineStart(mShowMaxLine - 1);
        int end = layout.getLineVisibleEnd(mShowMaxLine - 1);
        int maxLineIndex = end;
        TextPaint paint = getPaint();
        StringBuilder builder = new StringBuilder(ELLIPSIZE_END);
        if (mTipGravity == END) {
            builder.append("  ").append(mFoldText);
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
            float x = getWidth() - getPaddingLeft() - getPaddingRight() - getTextWidth(ELLIPSIZE_END.concat(mFoldText));
            while (layout.getPrimaryHorizontal(end - 1) + getTextWidth(mOriginalText.subSequence(end - 1, end).toString()) < x) {
                if(end >= maxLineIndex){
                    break;
                }
                end++;
            }
            end -= 2;
        } else {
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
        }
        CharSequence ellipsize = mOriginalText.subSequence(0, end);
        span.append(ellipsize);
        span.append(ELLIPSIZE_END);
        addTip(span, type);
    }
}
 addTip 是什么方法?请大神说说

jackerjin avatar Sep 23 '20 09:09 jackerjin

修改SpannableFoldTextView类 translateText方法,判断是否超过本行文字最大index

private void translateText(Layout layout, BufferType type) {
    if (layout.getLineCount() > mShowMaxLine) {
        SpannableStringBuilder span = new SpannableStringBuilder();
        int start = layout.getLineStart(mShowMaxLine - 1);
        int end = layout.getLineVisibleEnd(mShowMaxLine - 1);
        int maxLineIndex = end;
        TextPaint paint = getPaint();
        StringBuilder builder = new StringBuilder(ELLIPSIZE_END);
        if (mTipGravity == END) {
            builder.append("  ").append(mFoldText);
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
            float x = getWidth() - getPaddingLeft() - getPaddingRight() - getTextWidth(ELLIPSIZE_END.concat(mFoldText));
            while (layout.getPrimaryHorizontal(end - 1) + getTextWidth(mOriginalText.subSequence(end - 1, end).toString()) < x) {
                if(end >= maxLineIndex){
                    break;
                }
                end++;
            }
            end -= 2;
        } else {
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
        }
        CharSequence ellipsize = mOriginalText.subSequence(0, end);
        span.append(ellipsize);
        span.append(ELLIPSIZE_END);
        addTip(span, type);
    }
}
 addTip 是什么方法?请大神说说

原项目的方法,看下代码就知道了

WXZNJS avatar Sep 23 '20 10:09 WXZNJS

修改SpannableFoldTextView类 translateText方法,判断是否超过本行文字最大index

private void translateText(Layout layout, BufferType type) {
    if (layout.getLineCount() > mShowMaxLine) {
        SpannableStringBuilder span = new SpannableStringBuilder();
        int start = layout.getLineStart(mShowMaxLine - 1);
        int end = layout.getLineVisibleEnd(mShowMaxLine - 1);
        int maxLineIndex = end;
        TextPaint paint = getPaint();
        StringBuilder builder = new StringBuilder(ELLIPSIZE_END);
        if (mTipGravity == END) {
            builder.append("  ").append(mFoldText);
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
            float x = getWidth() - getPaddingLeft() - getPaddingRight() - getTextWidth(ELLIPSIZE_END.concat(mFoldText));
            while (layout.getPrimaryHorizontal(end - 1) + getTextWidth(mOriginalText.subSequence(end - 1, end).toString()) < x) {
                if(end >= maxLineIndex){
                    break;
                }
                end++;
            }
            end -= 2;
        } else {
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
        }
        CharSequence ellipsize = mOriginalText.subSequence(0, end);
        span.append(ellipsize);
        span.append(ELLIPSIZE_END);
        addTip(span, type);
    }
}
 addTip 是什么方法?请大神说说

原项目的方法,看下代码就知道了

谢谢了,换行的问题解决了,还有一个问题,这个全文在列表里上下不对齐,有什么好办法吗

jackerjin avatar Sep 23 '20 14:09 jackerjin

修改SpannableFoldTextView类 translateText方法,判断是否超过本行文字最大index

private void translateText(Layout layout, BufferType type) {
    if (layout.getLineCount() > mShowMaxLine) {
        SpannableStringBuilder span = new SpannableStringBuilder();
        int start = layout.getLineStart(mShowMaxLine - 1);
        int end = layout.getLineVisibleEnd(mShowMaxLine - 1);
        int maxLineIndex = end;
        TextPaint paint = getPaint();
        StringBuilder builder = new StringBuilder(ELLIPSIZE_END);
        if (mTipGravity == END) {
            builder.append("  ").append(mFoldText);
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
            float x = getWidth() - getPaddingLeft() - getPaddingRight() - getTextWidth(ELLIPSIZE_END.concat(mFoldText));
            while (layout.getPrimaryHorizontal(end - 1) + getTextWidth(mOriginalText.subSequence(end - 1, end).toString()) < x) {
                if(end >= maxLineIndex){
                    break;
                }
                end++;
            }
            end -= 2;
        } else {
            end -= paint.breakText(mOriginalText, start, end, false, paint.measureText(builder.toString()), null) + 1;
        }
        CharSequence ellipsize = mOriginalText.subSequence(0, end);
        span.append(ellipsize);
        span.append(ELLIPSIZE_END);
        addTip(span, type);
    }
}
 addTip 是什么方法?请大神说说

原项目的方法,看下代码就知道了

谢谢了,换行的问题解决了,还有一个问题,这个全文在列表里上下不对齐,有什么好办法吗 没太明白你的意思

WXZNJS avatar Sep 24 '20 01:09 WXZNJS

image

jackerjin avatar Sep 24 '20 02:09 jackerjin