From 53928035fdeabb07e4913cb7dd899930e96996d2 Mon Sep 17 00:00:00 2001 From: Matt Otto Date: Mon, 7 Feb 2022 16:20:27 -0600 Subject: [PATCH 1/3] Allow the text to grow to fit the space imposed by its parent. --- .../auto_fit_textview/AutoResizeTextView.kt | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt b/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt index 1e72576..4d21420 100644 --- a/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt +++ b/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt @@ -27,7 +27,8 @@ class AutoResizeTextView @JvmOverloads constructor(context: Context, attrs: Attr private var spacingMult = 1.0f private var spacingAdd = 0.0f private var minTextSize: Float = 0.toFloat() - private var widthLimit: Int = 0 + private var widthLimit: Int = Int.MAX_VALUE + private var heightLimit: Int = Int.MAX_VALUE private var maxLines: Int = 0 private var initialized = false private var textPaint: TextPaint? = null @@ -165,6 +166,20 @@ class AutoResizeTextView @JvmOverloads constructor(context: Context, attrs: Attr spacingAdd = add } + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + widthLimit = if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.UNSPECIFIED) { + Int.MAX_VALUE + } else { + MeasureSpec.getSize(widthMeasureSpec) - compoundPaddingLeft - compoundPaddingRight + } + heightLimit = if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) { + Int.MAX_VALUE + } else { + MeasureSpec.getSize(heightMeasureSpec) - compoundPaddingBottom - compoundPaddingTop + } + } + /** * Set the lower text size limit and invalidate the view * @@ -186,9 +201,7 @@ class AutoResizeTextView @JvmOverloads constructor(context: Context, attrs: Attr if (!initialized) return val startSize = minTextSize.toInt() - val heightLimit = measuredHeight - compoundPaddingBottom - compoundPaddingTop - widthLimit = measuredWidth - compoundPaddingLeft - compoundPaddingRight - if (widthLimit <= 0) + if (widthLimit <= 0 || heightLimit <= 0) return textPaint = TextPaint(paint) availableSpaceRect.right = widthLimit.toFloat() From ad1001bbe6e7a7b4ff18f56d117bd5bc8e38e2b2 Mon Sep 17 00:00:00 2001 From: Matt Otto Date: Mon, 7 Feb 2022 16:21:47 -0600 Subject: [PATCH 2/3] Max font size is now the set font size, not the set font size - 1. --- .../src/com/lb/auto_fit_textview/AutoResizeTextView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt b/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt index 4d21420..493ef1b 100644 --- a/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt +++ b/AutoFitTextViewLibrary/src/com/lb/auto_fit_textview/AutoResizeTextView.kt @@ -219,7 +219,7 @@ class AutoResizeTextView @JvmOverloads constructor(context: Context, attrs: Attr private fun binarySearch(start: Int, end: Int, sizeTester: SizeTester, availableSpace: RectF): Int { var lastBest = start var lo = start - var hi = end - 1 + var hi = end var mid: Int while (lo <= hi) { mid = (lo + hi).ushr(1) From 17063dc087907009ebdef39d5dfefef8018b8466 Mon Sep 17 00:00:00 2001 From: Matt Otto Date: Mon, 7 Feb 2022 18:19:18 -0600 Subject: [PATCH 3/3] Added sample activity that shows resizing the AutoFitTextView instead of recreating it. --- AutoFitTextViewSample/AndroidManifest.xml | 1 + .../res/layout/activity_resize.xml | 83 +++++++++++++++++ AutoFitTextViewSample/res/menu/main.xml | 1 + .../DynamicResizeActivity.kt | 92 +++++++++++++++++++ .../autofittextviewsample/MainActivity.kt | 4 + 5 files changed, 181 insertions(+) create mode 100644 AutoFitTextViewSample/res/layout/activity_resize.xml create mode 100644 AutoFitTextViewSample/src/com/example/autofittextviewsample/DynamicResizeActivity.kt diff --git a/AutoFitTextViewSample/AndroidManifest.xml b/AutoFitTextViewSample/AndroidManifest.xml index 335ebc0..ca8f897 100644 --- a/AutoFitTextViewSample/AndroidManifest.xml +++ b/AutoFitTextViewSample/AndroidManifest.xml @@ -12,6 +12,7 @@ + diff --git a/AutoFitTextViewSample/res/layout/activity_resize.xml b/AutoFitTextViewSample/res/layout/activity_resize.xml new file mode 100644 index 0000000..3e0b155 --- /dev/null +++ b/AutoFitTextViewSample/res/layout/activity_resize.xml @@ -0,0 +1,83 @@ + + + + + + +