diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 44655f18f3eb8..ac8d1a3752c5b 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -680,8 +680,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private static final int DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX = 1; // Contains the sorted set of desired text sizes in pixels to pick from when auto-sizing text. private int[] mAutoSizeTextSizesInPx; - // Specifies if the current TextView needs to be auto-sized. - private boolean mNeedsTextAutoResize = false; /** * Kick-start the font cache for the zygote process (to pay the cost of @@ -1561,7 +1559,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } Arrays.sort(mAutoSizeTextSizesInPx); - mNeedsTextAutoResize = true; break; default: throw new IllegalArgumentException( @@ -7524,7 +7521,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener scrollTo(0, 0); } - if (mNeedsTextAutoResize) { + if (isAutoSizeEnabled()) { // Call auto-size after the width and height have been calculated. autoSizeText(); } @@ -7536,20 +7533,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * Automatically computes and sets the text size. */ private void autoSizeText() { + final int maxWidth = getMeasuredWidth() - getTotalPaddingLeft() - getTotalPaddingRight(); + final int maxHeight = getMeasuredHeight() - getTotalPaddingBottom() - getTotalPaddingTop(); + + if (maxWidth <= 0 || maxHeight <= 0) { + return; + } + synchronized (TEMP_RECTF) { TEMP_RECTF.setEmpty(); - final int maxWidth = getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); - final int maxHeight = getMeasuredHeight() - getPaddingBottom() - getPaddingTop(); - - if (maxWidth <= 0 || maxHeight <= 0) { - return; - } - TEMP_RECTF.right = maxWidth; TEMP_RECTF.bottom = maxHeight; final float textSize = findLargestTextSizeWhichFits(TEMP_RECTF); - setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); - mNeedsTextAutoResize = false; + if (textSize != getTextSize()) { + setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); + } } } @@ -7594,13 +7592,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if ((mLayout instanceof BoringLayout) && BoringLayout.isBoring( text, mTempTextPaint, getTextDirectionHeuristic(), mBoring) != null) { - return mTempTextPaint.getFontSpacing() + getPaddingTop() + getPaddingBottom() - <= availableSpace.bottom - && mTempTextPaint.measureText(text, 0, text.length()) - + getPaddingLeft() + getPaddingRight() <= availableSpace.right; + 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, getMeasuredWidth() - getPaddingLeft() - getPaddingRight()); + mTempTextPaint, + getMeasuredWidth() - getTotalPaddingLeft() - getTotalPaddingRight()); layoutBuilder.setAlignment(getLayoutAlignment()); layoutBuilder.setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()); layoutBuilder.setIncludePad(true); @@ -9270,7 +9267,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** - * @return {@code true} if this TextView supports autosizing text to fit within its container. + * @return {@code true} if this widget supports auto-sizing text and has been configured to + * auto-size. + */ + private boolean isAutoSizeEnabled() { + return supportsAutoSizeText() && mAutoSizeType != AUTO_SIZE_TYPE_NONE; + } + + /** + * @return {@code true} if this TextView supports auto-sizing text to fit within its container. * @hide */ protected boolean supportsAutoSizeText() {