From 49ac7a83b8cd82a6bdbb14e046aab7e3e3ba0146 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 19 Aug 2023 10:46:17 +0200 Subject: [PATCH] Relayout NoRelayoutTextView if text gets longer (#6587) --- .../antennapod/view/NoRelayoutTextView.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java b/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java index 3f921b445..cbb2ef0af 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java +++ b/app/src/main/java/de/danoeh/antennapod/view/NoRelayoutTextView.java @@ -1,6 +1,5 @@ package de.danoeh.antennapod.view; -import android.annotation.SuppressLint; import android.content.Context; import android.util.AttributeSet; import androidx.annotation.NonNull; @@ -8,6 +7,9 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatTextView; public class NoRelayoutTextView extends AppCompatTextView { + private boolean requestLayoutEnabled = false; + private float maxTextLength = 0; + public NoRelayoutTextView(@NonNull Context context) { super(context); } @@ -20,9 +22,21 @@ public class NoRelayoutTextView extends AppCompatTextView { super(context, attrs, defStyleAttr); } - @SuppressLint("MissingSuperCall") @Override public void requestLayout() { - // Deliberate no-op + if (requestLayoutEnabled) { + super.requestLayout(); + } + requestLayoutEnabled = false; + } + + @Override + public void setText(CharSequence text, BufferType type) { + float textLength = getPaint().measureText(text.toString()); + if (textLength > maxTextLength) { + maxTextLength = textLength; + requestLayoutEnabled = true; + } + super.setText(text, type); } }