diff options
| -rw-r--r-- | core/java/android/text/DynamicLayout.java | 10 | ||||
| -rw-r--r-- | core/java/android/text/StaticLayout.java | 10 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 2 |
3 files changed, 13 insertions, 9 deletions
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java index f82c9c4f06e8..c3a2308d9df7 100644 --- a/core/java/android/text/DynamicLayout.java +++ b/core/java/android/text/DynamicLayout.java @@ -76,7 +76,7 @@ extends Layout boolean includepad, TextUtils.TruncateAt ellipsize, int ellipsizedWidth) { this(base, display, paint, width, align, TextDirectionHeuristics.FIRSTSTRONG_LTR, - spacingmult, spacingadd, includepad, ellipsize, ellipsizedWidth); + spacingmult, spacingadd, includepad, ellipsize, ellipsizedWidth, Integer.MAX_VALUE); } /** @@ -93,7 +93,7 @@ extends Layout int width, Alignment align, TextDirectionHeuristic textDir, float spacingmult, float spacingadd, boolean includepad, - TextUtils.TruncateAt ellipsize, int ellipsizedWidth) { + TextUtils.TruncateAt ellipsize, int ellipsizedWidth, int maxLines) { super((ellipsize == null) ? display : (display instanceof Spanned) @@ -135,6 +135,8 @@ extends Layout mEllipsize = true; } + mMaxLines = maxLines; + // Initial state is a single line with 0 characters (0 to 0), // with top at 0 and bottom at whatever is natural, and // undefined ellipsis. @@ -283,7 +285,7 @@ extends Layout reflowed.generate(text, where, where + after, getPaint(), getWidth(), getAlignment(), getTextDirectionHeuristic(), getSpacingMultiplier(), getSpacingAdd(), - false, true, mEllipsizedWidth, mEllipsizeAt); + false, true, mEllipsizedWidth, mEllipsizeAt, mMaxLines); int n = reflowed.getLineCount(); // If the new layout has a blank line at the end, but it is not @@ -488,6 +490,8 @@ extends Layout private int mTopPadding, mBottomPadding; + private int mMaxLines; + private static StaticLayout sStaticLayout = new StaticLayout(null); private static final Object[] sLock = new Object[0]; diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index 583cbe615fa4..7c273964fa5d 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -139,7 +139,7 @@ public class StaticLayout extends Layout { generate(source, bufstart, bufend, paint, outerwidth, align, textDir, spacingmult, spacingadd, includepad, includepad, - ellipsizedWidth, ellipsize); + ellipsizedWidth, ellipsize, mMaximumVisibleLineCount); mMeasured = MeasuredText.recycle(mMeasured); mFontMetricsInt = null; @@ -160,7 +160,7 @@ public class StaticLayout extends Layout { Alignment align, TextDirectionHeuristic textDir, float spacingmult, float spacingadd, boolean includepad, boolean trackpad, - float ellipsizedWidth, TextUtils.TruncateAt ellipsize) { + float ellipsizedWidth, TextUtils.TruncateAt ellipsize, int maxLines) { mLineCount = 0; int v = 0; @@ -477,13 +477,13 @@ public class StaticLayout extends Layout { width = restWidth; } } - if (mLineCount >= mMaximumVisibleLineCount) { + if (mLineCount >= maxLines) { break; } } } - if (paraEnd != here && mLineCount < mMaximumVisibleLineCount) { + if (paraEnd != here && mLineCount < maxLines) { if ((fitTop | fitBottom | fitDescent | fitAscent) == 0) { paint.getFontMetricsInt(fm); @@ -514,7 +514,7 @@ public class StaticLayout extends Layout { } if ((bufEnd == bufStart || source.charAt(bufEnd - 1) == CHAR_NEW_LINE) && - mLineCount < mMaximumVisibleLineCount) { + mLineCount < maxLines) { // Log.e("text", "output last " + bufEnd); paint.getFontMetricsInt(fm); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 8ea55c62530a..6ae6a8ed3e77 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -6253,7 +6253,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener result = new DynamicLayout(mText, mTransformed, mTextPaint, w, alignment, mTextDir, mSpacingMult, mSpacingAdd, mIncludePad, mInput == null ? effectiveEllipsize : null, - ellipsisWidth); + ellipsisWidth, mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); } else { if (boring == UNKNOWN_BORING) { boring = BoringLayout.isBoring(mTransformed, mTextPaint, mTextDir, mBoring); |