diff options
| author | Siyamed Sinir <siyamed@google.com> | 2017-07-24 12:18:27 -0700 |
|---|---|---|
| committer | Siyamed Sinir <siyamed@google.com> | 2017-07-26 15:32:04 -0700 |
| commit | 442c151b8d0800a3f30cdfc0bbfd40af524dcf7a (patch) | |
| tree | e7ff81a0d51b21895a6d91fb66158fd3bee52425 /core/java/android/text/StaticLayout.java | |
| parent | 737553c9424b93550bed543547d7cc7c5185e377 (diff) | |
Fix EditText line spacing
DynamicLayout did not include the line spacing for the newly added
lines. This CL updates StaticLayout with a parameter to force addition
of line spacing to the last line, and updates DynamicLayout to use this
parameter. With this change the last line will have the line spacing
applied, and it will provide a consistent UX.
Test: Manual/Visual test
Test: bit -t FrameworksCoreTests:android.text.StaticLayoutTest
Test: bit -t FrameworksCoreTests:android.text.StaticLayoutTextMeasuringTest
Test: bit -t FrameworksCoreTests:android.text.StaticLayoutLineBreakingTest
Test: bit -t FrameworksCoreTests:android.text.DynamicLayoutTest
Test: bit -t FrameworksCoreTests:android.text.DynamicLayoutBlocksTest
Test: bit -t CtsTextTestCases:android.text.cts.StaticLayoutTest
Test: bit -t CtsTextTestCases:android.text.cts.DynamicLayoutTest
Bug: 25194907
Change-Id: I52497fbd108538729758e842072f3ce87c6bbfdd
Diffstat (limited to 'core/java/android/text/StaticLayout.java')
| -rw-r--r-- | core/java/android/text/StaticLayout.java | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index dc5553ee4fe5..4eb74a738b63 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -334,6 +334,17 @@ public class StaticLayout extends Layout { return this; } + /** + * Sets whether the line spacing should be applied for the last line. Default value is + * {@code false}. + * + * @hide + */ + /* package */ Builder setAddLastLineLineSpacing(boolean value) { + mAddLastLineLineSpacing = value; + return this; + } + private long[] getHyphenators(LocaleList locales) { final int length = locales.size(); final long[] result = new long[length]; @@ -430,6 +441,7 @@ public class StaticLayout extends Layout { int[] mLeftIndents; int[] mRightIndents; int mJustificationMode; + boolean mAddLastLineLineSpacing; Paint.FontMetricsInt mFontMetricsInt = new Paint.FontMetricsInt(); @@ -599,6 +611,7 @@ public class StaticLayout extends Layout { float spacingadd = b.mSpacingAdd; float ellipsizedWidth = b.mEllipsizedWidth; TextUtils.TruncateAt ellipsize = b.mEllipsize; + final boolean addLastLineSpacing = b.mAddLastLineLineSpacing; LineBreaks lineBreaks = new LineBreaks(); // TODO: move to builder to avoid allocation costs // store span end locations int[] spanEndCache = new int[4]; @@ -849,8 +862,8 @@ public class StaticLayout extends Layout { fmAscent, fmDescent, fmTop, fmBottom, v, spacingmult, spacingadd, chooseHt, chooseHtv, fm, flags[breakIndex], needMultiply, chdirs, dir, easy, bufEnd, includepad, trackpad, - chs, widths, paraStart, ellipsize, ellipsizedWidth, - lineWidths[breakIndex], paint, moreChars); + addLastLineSpacing, chs, widths, paraStart, ellipsize, + ellipsizedWidth, lineWidths[breakIndex], paint, moreChars); if (endPos < spanEnd) { // preserve metrics for current span @@ -890,7 +903,7 @@ public class StaticLayout extends Layout { spacingmult, spacingadd, null, null, fm, 0, needMultiply, measured.mLevels, measured.mDir, measured.mEasy, bufEnd, - includepad, trackpad, null, + includepad, trackpad, addLastLineSpacing, null, null, bufStart, ellipsize, ellipsizedWidth, 0, paint, false); } @@ -903,7 +916,7 @@ public class StaticLayout extends Layout { Paint.FontMetricsInt fm, int flags, boolean needMultiply, byte[] chdirs, int dir, boolean easy, int bufEnd, boolean includePad, - boolean trackPad, char[] chs, + boolean trackPad, boolean addLastLineLineSpacing, char[] chs, float[] widths, int widthStart, TextUtils.TruncateAt ellipsize, float ellipsisWidth, float textWidth, TextPaint paint, boolean moreChars) { @@ -992,7 +1005,7 @@ public class StaticLayout extends Layout { } } - if (needMultiply && !lastLine) { + if (needMultiply && (addLastLineLineSpacing || !lastLine)) { double ex = (below - above) * (spacingmult - 1) + spacingadd; if (ex >= 0) { extra = (int)(ex + EXTRA_ROUNDING); |
