diff options
| -rw-r--r-- | core/java/android/widget/TextView.java | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index c5c317d671ef..48de68f5d956 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -1341,10 +1341,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener case com.android.internal.R.styleable.TextView_autoSizePresetSizes: final int autoSizeStepSizeArrayResId = a.getResourceId(attr, 0); if (autoSizeStepSizeArrayResId > 0) { - final TypedArray autoSizePreDefTextSizes = a.getResources() + final TypedArray autoSizePresetTextSizes = a.getResources() .obtainTypedArray(autoSizeStepSizeArrayResId); - setupAutoSizeUniformPresetSizes(autoSizePreDefTextSizes); - autoSizePreDefTextSizes.recycle(); + setupAutoSizeUniformPresetSizes(autoSizePresetTextSizes); + autoSizePresetTextSizes.recycle(); } break; } @@ -1647,7 +1647,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener displayMetrics); } - if (autoSizeMinTextSizeInPx == UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE) { + if (autoSizeStepGranularityInPx + == UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE) { autoSizeStepGranularityInPx = DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX; } @@ -1792,16 +1793,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } mAutoSizeTextSizesInPx = cleanupAutoSizePresetSizes(presetSizesInPx); - final int sizesLength = mAutoSizeTextSizesInPx.length; - mHasPresetAutoSizeValues = sizesLength > 0; - if (mHasPresetAutoSizeValues) { - mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_UNIFORM; - mAutoSizeMinTextSizeInPx = mAutoSizeTextSizesInPx[0]; - mAutoSizeMaxTextSizeInPx = mAutoSizeTextSizesInPx[sizesLength - 1]; - mAutoSizeStepGranularityInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE; - } else { + if (!setupAutoSizeUniformPresetSizesConfiguration()) { throw new IllegalArgumentException("None of the preset sizes is valid: " - + Arrays.toString(presetSizes)); + + Arrays.toString(presetSizes)); } } else { mHasPresetAutoSizeValues = false; @@ -1884,8 +1878,20 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener parsedSizes[i] = textSizes.getDimensionPixelSize(i, -1); } mAutoSizeTextSizesInPx = cleanupAutoSizePresetSizes(parsedSizes); - mHasPresetAutoSizeValues = mAutoSizeTextSizesInPx.length > 0; + setupAutoSizeUniformPresetSizesConfiguration(); + } + } + + private boolean setupAutoSizeUniformPresetSizesConfiguration() { + final int sizesLength = mAutoSizeTextSizesInPx.length; + mHasPresetAutoSizeValues = sizesLength > 0; + if (mHasPresetAutoSizeValues) { + mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_UNIFORM; + mAutoSizeMinTextSizeInPx = mAutoSizeTextSizesInPx[0]; + mAutoSizeMaxTextSizeInPx = mAutoSizeTextSizesInPx[sizesLength - 1]; + mAutoSizeStepGranularityInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE; } + return mHasPresetAutoSizeValues; } /** @@ -1900,7 +1906,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // First validate. if (autoSizeMinTextSizeInPx <= 0) { throw new IllegalArgumentException("Minimum auto-size text size (" - + autoSizeMinTextSizeInPx + "px) is less or equal to 0px)"); + + autoSizeMinTextSizeInPx + "px) is less or equal to (0px)"); } if (autoSizeMaxTextSizeInPx <= autoSizeMinTextSizeInPx) { @@ -1910,8 +1916,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } if (autoSizeStepGranularityInPx <= 0) { - throw new IllegalArgumentException("Minimum auto-size text size (" - + autoSizeStepGranularityInPx + "px) is less or equal to 0px)"); + throw new IllegalArgumentException("The auto-size step granularity (" + + autoSizeStepGranularityInPx + "px) is less or equal to (0px)"); } // All good, persist the configuration. @@ -8096,13 +8102,20 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return mTempTextPaint.getFontSpacing() <= availableSpace.bottom && mTempTextPaint.measureText(text, 0, text.length()) <= availableSpace.right; } else { - StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain(text, 0, text.length(), - mTempTextPaint, + final StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain( + text, 0, text.length(), mTempTextPaint, getMeasuredWidth() - getTotalPaddingLeft() - getTotalPaddingRight()); - layoutBuilder.setAlignment(getLayoutAlignment()); - layoutBuilder.setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()); - layoutBuilder.setIncludePad(true); - StaticLayout layout = layoutBuilder.build(); + + layoutBuilder.setAlignment(getLayoutAlignment()) + .setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()) + .setIncludePad(getIncludeFontPadding()) + .setBreakStrategy(getBreakStrategy()) + .setHyphenationFrequency(getHyphenationFrequency()) + .setJustify(getJustify()) + .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) + .setTextDirection(getTextDirectionHeuristic()); + + final StaticLayout layout = layoutBuilder.build(); // Lines overflow. if (maxLines != -1 && layout.getLineCount() > maxLines) { |