From 13fc7c7e0f0db009674167c66297de8d1a021d5d Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Fri, 24 Apr 2026 17:14:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8D22=E6=A0=BC?= =?UTF-8?q?=E9=AB=98=E5=AE=BD=E6=AF=94=E8=B0=83=E6=95=B4=E5=90=8E=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=AB=98=E5=BA=A6=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../match/adapter/Seasoning22GridAdapter.kt | 22 +++++++++++-------- .../com/shuwei/dish/match/ui/SlaveActivity.kt | 8 +++++-- .../ui/fragment/SeasoningConfigFragment.kt | 2 +- .../com/shuwei/dish/match/utils/SizeTool.kt | 21 +++++++++++++++--- app/src/main/res/layout/list_type_scale1.xml | 2 +- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/adapter/Seasoning22GridAdapter.kt b/app/src/main/java/com/shuwei/dish/match/adapter/Seasoning22GridAdapter.kt index 46cba74..f95c0f7 100644 --- a/app/src/main/java/com/shuwei/dish/match/adapter/Seasoning22GridAdapter.kt +++ b/app/src/main/java/com/shuwei/dish/match/adapter/Seasoning22GridAdapter.kt @@ -15,21 +15,24 @@ import com.shuwei.dish.match.R import com.shuwei.dish.match.databinding.ListItemScale22RowBinding import com.shuwei.dish.match.scale.ScaleData import com.shuwei.dish.match.scale.ScaleDeviceConfig +import com.shuwei.dish.match.utils.SizeTool import com.shuwei.dish.match.utils.WeightUtil import com.shuwei.dish.match.utils.ext.dp /** * 22格网格 Adapter,同时服务于调料配置页和主设备秤总览页。 * - * @param largeSize 前4个大格子的尺寸(px) - * @param smallSize 其余小格子的尺寸(px) - * @param showNameOnly true = 调料配置模式,仅显示 tvName,隐藏 tvWeight/tvState; - * false = 秤总览模式,三行全部显示 - * @param showAddress true = 显示秤地址行(tvAddress),仅 MasterScaleActivity 使用 + * @param largeSize 前4个大格子的宽度(px) + * @param smallSize 其余小格子的宽度(px) + * @param cellAspectRatio 格子高宽比(height / width) + * @param showNameOnly true = 调料配置模式,仅显示 tvName,隐藏 tvWeight/tvState; + * false = 秤总览模式,三行全部显示 + * @param showAddress true = 显示秤地址行(tvAddress),仅 MasterScaleActivity 使用 */ class Seasoning22GridAdapter( private val largeSize: Int, private val smallSize: Int, + private val cellAspectRatio: Float = SizeTool.DEFAULT_CELL_ASPECT_RATIO, private val showNameOnly: Boolean = false, private val showAddress: Boolean = false ) : BaseQuickAdapter(mutableListOf()) { @@ -51,13 +54,14 @@ class Seasoning22GridAdapter( override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): VH { val b = ListItemScale22RowBinding.inflate(LayoutInflater.from(context), parent, false) - val cellSize = if (viewType == 1) largeSize else smallSize + val cellWidth = if (viewType == 1) largeSize else smallSize + val cellHeight = (cellWidth * cellAspectRatio).toInt() b.root.updateLayoutParams { - width = cellSize - height = cellSize + width = cellWidth + height = cellHeight setMargins(2.dp, 2.dp, 2.dp, 2.dp) } - val baseSp = (cellSize / parent.resources.displayMetrics.density).toInt() + val baseSp = (cellWidth / parent.resources.displayMetrics.density).toInt() b.tvAddress.textSize = (baseSp * 0.14f).coerceIn(8f, 12f) b.tvName.textSize = (baseSp * 0.18f).coerceIn(10f, 16f) b.tvWeight.textSize = (baseSp * 0.22f).coerceIn(12f, 20f) diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt index d28311c..04dfa38 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt @@ -100,7 +100,11 @@ class SlaveActivity : BaseActivity() { flexWrap = FlexWrap.WRAP alignItems = AlignItems.FLEX_START } - scale22Adapter = Seasoning22GridAdapter(size.largeSize, size.smallSize, showNameOnly = false).also { + scale22Adapter = Seasoning22GridAdapter( + size.largeSize, + size.smallSize, + showNameOnly = false + ).also { it.onItemClick = { scale, _ -> showTareDialog(scale.address) } } binding.rvScaleList.adapter = scale22Adapter @@ -320,7 +324,7 @@ class SlaveActivity : BaseActivity() { /** 重量增加阈值(克),超过此值才触发高亮 */ private const val WEIGHT_DELTA_THRESHOLD = 10.0 /** 高亮自动恢复时间(毫秒) */ - private const val HIGHLIGHT_DURATION_MS = 8_000L + private const val HIGHLIGHT_DURATION_MS = 5_000L } /** diff --git a/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt b/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt index 00d78b1..6186f76 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/fragment/SeasoningConfigFragment.kt @@ -39,7 +39,7 @@ class SeasoningConfigFragment : BaseFragment() { private const val WEIGHT_DELTA_THRESHOLD = 10.0 /** 高亮自动恢复时间(毫秒) */ - private const val HIGHLIGHT_DURATION_MS = 8_000L + private const val HIGHLIGHT_DURATION_MS = 5_000L } override fun inflateBinding( diff --git a/app/src/main/java/com/shuwei/dish/match/utils/SizeTool.kt b/app/src/main/java/com/shuwei/dish/match/utils/SizeTool.kt index f54424f..97f71d3 100644 --- a/app/src/main/java/com/shuwei/dish/match/utils/SizeTool.kt +++ b/app/src/main/java/com/shuwei/dish/match/utils/SizeTool.kt @@ -2,6 +2,7 @@ package com.shuwei.dish.match.utils import com.shuwei.dish.match.base.BaseApp import com.shuwei.dish.match.utils.ext.dp +import kotlin.math.max data class FlexLayoutSize( val smallSize: Int, @@ -11,14 +12,28 @@ data class FlexLayoutSize( object SizeTool { - fun getFlexLayoutSize(leftRightSpace: Int = 10.dp): FlexLayoutSize { + const val DEFAULT_CELL_ASPECT_RATIO = 1.26f + + fun getFlexLayoutSize( + leftRightSpace: Int, + cellAspectRatio: Float = DEFAULT_CELL_ASPECT_RATIO, + cellMargin: Int = 2.dp + ): FlexLayoutSize { // 上层:FlexboxLayoutManager,仿 MasterScaleActivity 中 Scale22VH 的布局方式 - // rvTop 高度 = 小格子尺寸 * 3行 + 3 * 间距,与 Scale22VH 保持一致 + // rvTop 高度需覆盖: + // 1) 小格列(3行)总高度 + // 2) 大格列(2行)总高度(考虑四舍五入误差) val screenWidth = BaseApp.instance!!.resources.displayMetrics.widthPixels val usable = screenWidth - 8 * 4.dp - leftRightSpace val smallSize = usable / 9 val largeSize = (usable - smallSize * 6) / 2 - val rvHeight = smallSize * 3 + 3 * 4.dp + val smallHeight = (smallSize * cellAspectRatio).toInt() + val largeHeight = (largeSize * cellAspectRatio).toInt() + + val smallColumnHeight = smallHeight * 3 + cellMargin * 6 + val largeColumnHeight = largeHeight * 2 + cellMargin * 4 + val rvHeight = max(smallColumnHeight, largeColumnHeight) + return FlexLayoutSize(smallSize, largeSize, rvHeight) } diff --git a/app/src/main/res/layout/list_type_scale1.xml b/app/src/main/res/layout/list_type_scale1.xml index b165a97..f4bc301 100644 --- a/app/src/main/res/layout/list_type_scale1.xml +++ b/app/src/main/res/layout/list_type_scale1.xml @@ -29,7 +29,7 @@