OSDN Git Service

StaticLayout capped height should be 0 when maxLines=0
authorSiyamed Sinir <siyamed@google.com>
Tue, 22 Aug 2017 01:50:45 +0000 (18:50 -0700)
committerSiyamed Sinir <siyamed@google.com>
Tue, 22 Aug 2017 02:22:58 +0000 (19:22 -0700)
Previously we added mMaxLineHeight to track the line height at the
maxLines value. However when maxLines is set to zero, mMaxLineHeight is
not calculated and remains 0. When maxLines is set to zero, the capped
height of the layout should be 0.

Test: Added a test case to coretests/StaticLayoutTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutTest
Test: bit FrameworksCoreTests:android.text.DynamicLayoutTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutLineBreakingTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutBidiTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutTextMeasuringTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutDirectionsTest
Test: bit CtsTextTestCases:android.text.cts.StaticLayoutTest
Test: bit CtsTextTestCases:android.text.cts.DynamicLayoutTest
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest

Bug: 64822158
Change-Id: Id9240ee7b893f8af9cd0d91329617c24da80c7d2
Merged-In: a8d982d6c850c8b3822d9ad01f8579c003da45db
(cherry picked from commit a8d982d6c850c8b3822d9ad01f8579c003da45db)

core/java/android/text/StaticLayout.java
core/tests/coretests/src/android/text/StaticLayoutTest.java

index 16f40ba..a03a4fb 100644 (file)
@@ -609,7 +609,7 @@ public class StaticLayout extends Layout {
 
         mLineCount = 0;
         mEllipsized = false;
-        mMaxLineHeight = DEFAULT_MAX_LINE_HEIGHT;
+        mMaxLineHeight = mMaximumVisibleLineCount < 1 ? 0 : DEFAULT_MAX_LINE_HEIGHT;
 
         int v = 0;
         boolean needMultiply = (spacingmult != 1 || spacingadd != 0);
index fb60e38..f1c4e56 100644 (file)
@@ -746,4 +746,15 @@ public class StaticLayoutTest {
             assertEquals(numEnglishLines, numPrivateLocaleLines);
         }
     }
+
+    @Test
+    public void testGetHeight_zeroMaxLines() {
+        final String text = "a\nb";
+        final TextPaint paint = new TextPaint();
+        final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), paint,
+                Integer.MAX_VALUE).setMaxLines(0).build();
+
+        assertEquals(0, layout.getHeight(true));
+        assertEquals(2, layout.getLineCount());
+    }
 }