FoldText_Java
FoldText_Java copied to clipboard
文字换行bugfix
修改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);
}
}
修改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 是什么方法?请大神说说
修改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 是什么方法?请大神说说
原项目的方法,看下代码就知道了
修改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 是什么方法?请大神说说
原项目的方法,看下代码就知道了
谢谢了,换行的问题解决了,还有一个问题,这个全文在列表里上下不对齐,有什么好办法吗
修改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 是什么方法?请大神说说
原项目的方法,看下代码就知道了
谢谢了,换行的问题解决了,还有一个问题,这个全文在列表里上下不对齐,有什么好办法吗 没太明白你的意思