搜索与发现项目

This commit is contained in:
HapeLee
2025-10-27 01:06:19 +08:00
parent 2d2b4d949a
commit d98abed00b
8 changed files with 84 additions and 79 deletions
@@ -3,6 +3,7 @@ package io.legato.kazusa.ui.book.explore
import android.content.Context
import android.os.Bundle
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.core.view.isVisible
import io.legato.kazusa.R
import io.legato.kazusa.base.adapter.ItemViewHolder
@@ -11,7 +12,10 @@ import io.legato.kazusa.data.entities.Book
import io.legato.kazusa.data.entities.SearchBook
import io.legato.kazusa.databinding.ItemSearchBinding
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.ui.widget.text.AccentBgTextView
import io.legato.kazusa.utils.dpToPx
import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.spToPx
import io.legato.kazusa.utils.visible
@@ -53,13 +57,25 @@ class ExploreShowAdapter(context: Context, val callBack: CallBack) :
tvIntroduce.text = item.trimIntro(context)
val kinds = item.getKindList()
if (kinds.isEmpty()) {
tvKind.gone()
tvAuthorKind.gone()
kindContainer.gone()
} else {
tvAuthorKind.visible()
tvKind.visible()
val kindText = kinds.joinToString("")
tvKind.text = kindText
kindContainer.visible()
kindContainer.removeAllViews()
kinds.forEach { kind ->
val kindTextView = AccentBgTextView(context).apply {
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
marginEnd = 6.dpToPx()
}
textSize = 11f
text = kind
setLines(1)
setSingleLine(true)
}
kindContainer.addView(kindTextView)
}
}
ivCover.load(
item.coverUrl,
@@ -3,6 +3,7 @@ package io.legato.kazusa.ui.book.search
import android.content.Context
import android.os.Bundle
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import io.legato.kazusa.R
@@ -11,6 +12,8 @@ import io.legato.kazusa.base.adapter.ItemViewHolder
import io.legato.kazusa.data.entities.SearchBook
import io.legato.kazusa.databinding.ItemSearchBinding
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.ui.widget.text.AccentBgTextView
import io.legato.kazusa.utils.dpToPx
import io.legato.kazusa.utils.gone
import io.legato.kazusa.utils.visible
@@ -135,13 +138,25 @@ class SearchAdapter(context: Context, val callBack: CallBack) :
private fun upKind(binding: ItemSearchBinding, kinds: List<String>) = binding.run {
if (kinds.isEmpty()) {
tvKind.gone()
tvAuthorKind.gone()
kindContainer.gone()
} else {
tvAuthorKind.visible()
tvKind.visible()
val kindText = kinds.joinToString("")
tvKind.text = kindText
kindContainer.visible()
kindContainer.removeAllViews()
kinds.forEach { kind ->
val kindTextView = AccentBgTextView(context).apply {
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
marginEnd = 4.dpToPx()
}
textSize = 11f
text = kind
setLines(1)
setSingleLine(true)
}
kindContainer.addView(kindTextView)
}
}
}
@@ -2,6 +2,7 @@ package io.legato.kazusa.ui.widget.text
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import com.google.android.material.color.MaterialColors
import com.google.android.material.textview.MaterialTextView
import io.legato.kazusa.R
@@ -9,6 +10,7 @@ import io.legato.kazusa.lib.theme.Selector
import io.legato.kazusa.utils.ColorUtils
import io.legato.kazusa.utils.dpToPx
import androidx.core.content.withStyledAttributes
import io.legato.kazusa.utils.spToPx
import io.legato.kazusa.utils.themeColor
class AccentBgTextView @JvmOverloads constructor(
@@ -16,13 +18,14 @@ class AccentBgTextView @JvmOverloads constructor(
attrs: AttributeSet? = null
) : MaterialTextView(context, attrs) {
private var radiusPx = 32
private var radiusPx = 20
init {
// context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) {
// val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0)
// radiusPx = radiusDp
// }
gravity = Gravity.CENTER
includeFontPadding = false
val horizontalPadding = 6.dpToPx()
val verticalPadding = 2.dpToPx()
setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding)
updateBackground()
}
@@ -32,8 +35,8 @@ class AccentBgTextView @JvmOverloads constructor(
}
private fun updateBackground() {
val backgroundColor = context.themeColor(com.google.android.material.R.attr.colorPrimaryContainer)
val textColor = context.themeColor(com.google.android.material.R.attr.colorOnPrimaryContainer)
val backgroundColor = context.themeColor(com.google.android.material.R.attr.colorSecondaryContainer)
val textColor = context.themeColor(com.google.android.material.R.attr.colorOnSecondaryContainer)
background = Selector.shapeBuild()
.setCornerRadius(radiusPx)
@@ -43,5 +46,4 @@ class AccentBgTextView @JvmOverloads constructor(
setTextColor(textColor)
}
}
}