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 @@