From 715589fb46967ce8aff4406ca7bfc58ad3e3b6ed Mon Sep 17 00:00:00 2001 From: Siyamed Sinir Date: Fri, 12 Feb 2016 18:03:55 -0800 Subject: [PATCH] Ellipsized and Non-ellipsized baselines should be same. This CL make sure that ellipsized and non-ellipsized text have the same baseline. - TextView did not set the maxLines for StaticLayout when ellipsized is false. This resulted in height and baseline calculation discrepancies between ellipsized and non-ellipsized TextViews using StaticLayout. - For single line TextViews when a text is not ellipsized BoringLayout is used, and when text is ellipsized StaticLayout is used. Because of the bottom padding added to the last line of StaticLayout, those two did not have the same baseline. Bug: 18864800 Change-Id: I5dbc48a6c7f0f4ac4c693d5c95f0a99b989e07f4 --- core/java/android/text/BoringLayout.java | 8 ++------ core/java/android/widget/TextView.java | 13 +++++++------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java index fd9188b795993..0f65f80d5ca24 100644 --- a/core/java/android/text/BoringLayout.java +++ b/core/java/android/text/BoringLayout.java @@ -189,12 +189,6 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback mBottom = spacing; - if (includepad) { - mDesc = spacing + metrics.top; - } else { - mDesc = spacing + metrics.ascent; - } - if (trustWidth) { mMax = metrics.width; } else { @@ -214,6 +208,8 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback mTopPadding = metrics.top - metrics.ascent; mBottomPadding = metrics.bottom - metrics.descent; } + + mDesc = spacing + mBottomPadding + (includepad ? metrics.top : metrics.ascent); } /** diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index a5c1da936f99c..95fcdc1796432 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -6853,11 +6853,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setLineSpacing(mSpacingAdd, mSpacingMult) .setIncludePad(mIncludePad) .setBreakStrategy(mBreakStrategy) - .setHyphenationFrequency(mHyphenationFrequency); + .setHyphenationFrequency(mHyphenationFrequency) + .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); if (shouldEllipsize) { builder.setEllipsize(mEllipsize) - .setEllipsizedWidth(ellipsisWidth) - .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); + .setEllipsizedWidth(ellipsisWidth); } mHintLayout = builder.build(); } @@ -6944,11 +6944,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener .setLineSpacing(mSpacingAdd, mSpacingMult) .setIncludePad(mIncludePad) .setBreakStrategy(mBreakStrategy) - .setHyphenationFrequency(mHyphenationFrequency); + .setHyphenationFrequency(mHyphenationFrequency) + .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); if (shouldEllipsize) { builder.setEllipsize(effectiveEllipsize) - .setEllipsizedWidth(ellipsisWidth) - .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE); + .setEllipsizedWidth(ellipsisWidth); + } // TODO: explore always setting maxLines result = builder.build();