From 028f474b1434afe6a638f39976e8a4444ead85dc Mon Sep 17 00:00:00 2001 From: shenqinci Date: Tue, 5 Jun 2018 17:30:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E4=B8=AD=E5=8C=85=E5=90=AB=E6=8D=A2=E8=A1=8C=E7=AC=A6=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=BB=93=E7=AE=97=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/ExpandableTextView.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java b/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java index 3832ea4..cc9f4db 100644 --- a/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java +++ b/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java @@ -267,13 +267,20 @@ private CharSequence getNewTextByConfig(){ int indexEndTrimmedRevised = indexEndTrimmed; if (remainWidth > widthTailReplaced) { + //让按钮尽可能靠最右边走 int extraOffset = 0; int extraWidth = 0; + String tempText; while (remainWidth > widthTailReplaced + extraWidth) { extraOffset++; if (indexEndTrimmed + extraOffset <= mOrigText.length()) { - extraWidth = (int) (mTextPaint.measureText( - mOrigText.subSequence(indexEndTrimmed, indexEndTrimmed + extraOffset).toString()) + 0.5); + tempText = mOrigText.subSequence(indexEndTrimmed, indexEndTrimmed + extraOffset).toString(); + extraWidth = (int) (mTextPaint.measureText(tempText) + 0.5); + if (tempText.endsWith("\n")) { + //fix by shenqinci 修复文本中间主动换行导致计算不正确的bug + //(无法提前结束,只根据extraOffset截取,导致text已经包含非本行的text) + break; + } } else { break; } @@ -536,4 +543,4 @@ private TouchableSpan getPressedSpan(TextView textView, Spannable spannable, Mot return touchedSpan; } } -} \ No newline at end of file +} From ab577f9a8c90eaca7675a7cc97c392f4a3198979 Mon Sep 17 00:00:00 2001 From: shenqinci Date: Tue, 5 Jun 2018 18:16:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8D=A2=E8=A1=8C?= =?UTF-8?q?=E7=AC=A6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/ExpandableTextView.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java b/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java index cc9f4db..d591425 100644 --- a/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java +++ b/library/src/main/java/cn/carbs/android/expandabletextview/library/ExpandableTextView.java @@ -260,32 +260,36 @@ private CharSequence getNewTextByConfig(){ indexEndTrimmed = indexEnd; } + String currentLineText = mOrigText.subSequence(indexStart, indexEndTrimmed).toString(); int remainWidth = getValidLayout().getWidth() - - (int) (mTextPaint.measureText(mOrigText.subSequence(indexStart, indexEndTrimmed).toString()) + 0.5); + (int) (mTextPaint.measureText(currentLineText) + 0.5); float widthTailReplaced = mTextPaint.measureText(getContentOfString(mEllipsisHint) + (mShowToExpandHint ? (getContentOfString(mToExpandHint) + getContentOfString(mGapToExpandHint)) : "")); int indexEndTrimmedRevised = indexEndTrimmed; if (remainWidth > widthTailReplaced) { - //让按钮尽可能靠最右边走 - int extraOffset = 0; - int extraWidth = 0; - String tempText; - while (remainWidth > widthTailReplaced + extraWidth) { - extraOffset++; - if (indexEndTrimmed + extraOffset <= mOrigText.length()) { - tempText = mOrigText.subSequence(indexEndTrimmed, indexEndTrimmed + extraOffset).toString(); - extraWidth = (int) (mTextPaint.measureText(tempText) + 0.5); - if (tempText.endsWith("\n")) { - //fix by shenqinci 修复文本中间主动换行导致计算不正确的bug - //(无法提前结束,只根据extraOffset截取,导致text已经包含非本行的text) + //currentLineText 如果已经是单独一行,则不需要处理 + if (!currentLineText.endsWith("\n")) { + //让按钮尽可能靠最右边走 + int extraOffset = 0; + int extraWidth = 0; + String tempText; + while (remainWidth > widthTailReplaced + extraWidth) { + extraOffset++; + if (indexEndTrimmed + extraOffset <= mOrigText.length()) { + tempText = mOrigText.subSequence(indexEndTrimmed, indexEndTrimmed + extraOffset).toString(); + extraWidth = (int) (mTextPaint.measureText(tempText) + 0.5); + if (tempText.endsWith("\n")) { + //fix by shenqinci 修复文本中间主动换行导致计算不正确的bug + //(无法提前结束,只根据extraOffset截取,导致text已经包含非本行的text) + break; + } + } else { break; } - } else { - break; } + indexEndTrimmedRevised += extraOffset - 1; } - indexEndTrimmedRevised += extraOffset - 1; } else { int extraOffset = 0; int extraWidth = 0;