From ac9239376ae963491389f10422359145897bb1e3 Mon Sep 17 00:00:00 2001 From: xiaji Date: Sun, 24 May 2026 22:26:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=92=AD=E6=94=BE=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E5=88=97=E8=A1=A8=E6=A0=B7=E5=BC=8F=EF=BC=9A=E5=9B=BA?= =?UTF-8?q?=E5=AE=9A=E5=AE=BD=E5=BA=A6=E5=8D=A1=E7=89=87=E3=80=81=E6=A8=AA?= =?UTF-8?q?=E5=90=91=E6=BB=9A=E5=8A=A8=E3=80=81=E6=B7=BB=E5=8A=A0=E5=B0=81?= =?UTF-8?q?=E9=9D=A2=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/videoapp/tv/ui/SearchFragment.kt | 102 +++++++++++++++--- 1 file changed, 87 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt b/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt index b10b7c2..97b93f3 100644 --- a/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt +++ b/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt @@ -287,24 +287,96 @@ class SearchFragment : Fragment() { playHistoryList.visibility = View.VISIBLE for (item in list) { - val chip = Button(requireContext()).apply { - // 显示视频名称和剧集名称 - text = if (item.episodeName != null) { - "${item.title} - ${item.episodeName}" - } else { - item.title + // 创建外层容器,固定宽度 + val container = android.widget.LinearLayout(requireContext()).apply { + orientation = android.widget.LinearLayout.VERTICAL + setPadding(12, 12, 12, 12) + layoutParams = android.widget.LinearLayout.LayoutParams( + 200, // 固定宽度 200dp + android.widget.LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + marginEnd = 16 } - setTextColor(ContextCompat.getColor(requireContext(), R.color.text_primary)) - setBackgroundResource(R.drawable.history_chip_selector) - textSize = 14f - setPadding(24, 12, 24, 12) - isFocusable = true - isFocusableInTouchMode = true - setOnClickListener { - openPlayerFromHistory(item) + background = android.graphics.drawable.GradientDrawable().apply { + setColor(android.graphics.Color.parseColor("#2D2D2D")) + cornerRadius = 12f + setStroke(2, android.graphics.Color.parseColor("#3D3D3D")) } } - playHistoryList.addView(chip) + + // 创建封面图片区域 + val coverView = android.widget.ImageView(requireContext()).apply { + layoutParams = android.widget.LinearLayout.LayoutParams( + android.widget.LinearLayout.LayoutParams.MATCH_PARENT, + 100 // 固定高度 100dp + ).apply { + bottomMargin = 8 + } + scaleType = android.widget.ImageView.ScaleType.CENTER_CROP + setBackgroundColor(android.graphics.Color.parseColor("#1E1E1E")) + // 加载封面图 + if (!item.coverUrl.isNullOrEmpty()) { + com.bumptech.glide.Glide.with(this) + .load(item.coverUrl) + .placeholder(android.R.color.darker_gray) + .error(android.R.color.darker_gray) + .into(this) + } + } + + // 创建文字显示区域 + val titleText = TextView(requireContext()).apply { + text = item.title + setTextColor(ContextCompat.getColor(requireContext(), R.color.text_primary)) + textSize = 13f + setPadding(4, 4, 4, 2) + maxLines = 1 + ellipsize = android.text.TextUtils.TruncateAt.END + } + + // 创建剧集文字显示 + val episodeText = TextView(requireContext()).apply { + text = item.episodeName ?: "" + setTextColor(ContextCompat.getColor(requireContext(), R.color.text_secondary)) + textSize = 11f + setPadding(4, 2, 4, 4) + maxLines = 1 + ellipsize = android.text.TextUtils.TruncateAt.END + visibility = if (item.episodeName.isNullOrEmpty()) View.GONE else View.VISIBLE + } + + // 添加到容器 + container.addView(coverView) + container.addView(titleText) + container.addView(episodeText) + + // 设置点击事件 + container.setOnClickListener { + openPlayerFromHistory(item) + } + + // 设置焦点效果 + container.isFocusable = true + container.isFocusableInTouchMode = true + container.setOnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + v.background = android.graphics.drawable.GradientDrawable().apply { + setColor(android.graphics.Color.parseColor("#3D3D3D")) + cornerRadius = 12f + setStroke(3, android.graphics.Color.parseColor("#1A73E8")) + } + v.animate().scaleX(1.05f).scaleY(1.05f).setDuration(150).start() + } else { + v.background = android.graphics.drawable.GradientDrawable().apply { + setColor(android.graphics.Color.parseColor("#2D2D2D")) + cornerRadius = 12f + setStroke(2, android.graphics.Color.parseColor("#3D3D3D")) + } + v.animate().scaleX(1.0f).scaleY(1.0f).setDuration(150).start() + } + } + + playHistoryList.addView(container) } }