Merge "AutoSize TextView - fix measurements" into oc-dev

This commit is contained in:
Andrei Stingaceanu
2017-04-10 12:48:28 +00:00
committed by Android (Google) Code Review

View File

@@ -8148,35 +8148,29 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mTempTextPaint.set(getPaint()); mTempTextPaint.set(getPaint());
mTempTextPaint.setTextSize(suggestedSizeInPx); mTempTextPaint.setTextSize(suggestedSizeInPx);
if ((mLayout instanceof BoringLayout) && BoringLayout.isBoring( final StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain(
text, mTempTextPaint, getTextDirectionHeuristic(), mBoring) != null) { text, 0, text.length(), mTempTextPaint,
return mTempTextPaint.getFontSpacing() <= availableSpace.bottom getMeasuredWidth() - getTotalPaddingLeft() - getTotalPaddingRight());
&& mTempTextPaint.measureText(text, 0, text.length()) <= availableSpace.right;
} else {
final StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain(
text, 0, text.length(), mTempTextPaint,
getMeasuredWidth() - getTotalPaddingLeft() - getTotalPaddingRight());
layoutBuilder.setAlignment(getLayoutAlignment()) layoutBuilder.setAlignment(getLayoutAlignment())
.setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()) .setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier())
.setIncludePad(getIncludeFontPadding()) .setIncludePad(getIncludeFontPadding())
.setBreakStrategy(getBreakStrategy()) .setBreakStrategy(getBreakStrategy())
.setHyphenationFrequency(getHyphenationFrequency()) .setHyphenationFrequency(getHyphenationFrequency())
.setJustificationMode(getJustificationMode()) .setJustificationMode(getJustificationMode())
.setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE)
.setTextDirection(getTextDirectionHeuristic()); .setTextDirection(getTextDirectionHeuristic());
final StaticLayout layout = layoutBuilder.build(); final StaticLayout layout = layoutBuilder.build();
// Lines overflow. // Lines overflow.
if (maxLines != -1 && layout.getLineCount() > maxLines) { if (maxLines != -1 && layout.getLineCount() > maxLines) {
return false; return false;
} }
// Height overflow. // Height overflow.
if (layout.getHeight() > availableSpace.bottom) { if (layout.getHeight() > availableSpace.bottom) {
return false; return false;
}
} }
return true; return true;