diff --git a/app/src/main/java/io/legado/app/ui/widget/LabelsBar.kt b/app/src/main/java/io/legado/app/ui/widget/LabelsBar.kt index b0bf97779..22f982cf6 100644 --- a/app/src/main/java/io/legado/app/ui/widget/LabelsBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/LabelsBar.kt @@ -3,15 +3,18 @@ package io.legado.app.ui.widget import android.content.Context import android.util.AttributeSet import android.widget.LinearLayout +import android.widget.TextView import io.legado.app.ui.widget.text.AccentBgTextView import io.legado.app.utils.dp class LabelsBar(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { + private val unUsedViews = arrayListOf() + private val usedViews = arrayListOf() fun setLabels(labels: Array) { - removeAllViews() + clear() labels.forEach { addLabel(it) } @@ -25,18 +28,30 @@ class LabelsBar(context: Context, attrs: AttributeSet?) : LinearLayout(context, } fun clear() { + unUsedViews.addAll(usedViews) + usedViews.clear() removeAllViews() } fun addLabel(label: String) { - addView(AccentBgTextView(context, null).apply { - setPadding(3.dp, 0, 3.dp, 0) - setRadios(2) - val lp = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) - lp.setMargins(0, 0, 2.dp, 0) - layoutParams = lp - text = label - }) + val tv = if (unUsedViews.isEmpty()) { + AccentBgTextView(context, null).apply { + setPadding(3.dp, 0, 3.dp, 0) + setRadios(2) + val lp = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) + lp.setMargins(0, 0, 2.dp, 0) + layoutParams = lp + text = label + usedViews.add(this) + } + } else { + unUsedViews.last().apply { + usedViews.add(this) + unUsedViews.removeAt(unUsedViews.lastIndex) + } + } + tv.text = label + addView(tv) } } \ No newline at end of file