refactor(activity): 重构 MasterScaleActivity 多类型秤布局,新增 Scale22GridActivity

- MasterScaleActivity 使用 BaseMultiItemAdapter 支持4种 viewType(scale1/2/18/22)
- 内嵌 adapter 改用 BaseQuickAdapter + 自定义 VH,替换原 RecyclerView.Adapter
- 新增 Scale22GridActivity,使用 FlexboxLayoutManager 实现22格混合网格布局
- 新增 list_type_scale1/2/18/22.xml 及 list_item_scale22_row.xml 布局文件
- 删除废弃的 list_item_scale_data.xml
- 新增 flexbox 依赖,注册 Scale22GridActivity
This commit is contained in:
2026-04-15 16:44:33 +08:00
parent 5ac35a9cab
commit b775b20ff1
16 changed files with 732 additions and 288 deletions
@@ -53,10 +53,12 @@
android:id="@+id/rvScaleList"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@id/tvConnectionStatus"
app:layout_constraintBottom_toBottomOf="parent"
android:overScrollMode="never"
android:padding="0dp"
tools:listitem="@layout/list_item_scale_data"/>
tools:listitem="@layout/list_type_scale22"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="@color/bg_color">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="22格秤数据"
android:textColor="@color/home_title"
android:textSize="36sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/ivBack"
android:layout_width="70dp"
android:layout_height="60dp"
android:paddingStart="30dp"
android:paddingEnd="10dp"
android:src="@drawable/ic_back"
app:layout_constraintBottom_toBottomOf="@id/tvTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/tvTitle"
tools:ignore="ContentDescription" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvScale22"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:overScrollMode="never"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
tools:listitem="@layout/list_item_scale22_row" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 单个秤格子:地址 + 重量 + 状态 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="4dp"
android:background="@drawable/shape_scale_cell">
<TextView
android:id="@+id/tvAddr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:includeFontPadding="false"
android:textColor="@color/home_sub_title" />
<TextView
android:id="@+id/tvWeight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:includeFontPadding="false"
android:textColor="@color/home_title"
android:textStyle="bold" />
<TextView
android:id="@+id/tvState"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:includeFontPadding="false"
android:textColor="@color/home_sub_title" />
</LinearLayout>
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 1个秤设备的卡片布局 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="10dp">
<TextView
android:id="@+id/tvDeviceIp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:includeFontPadding="false"
android:textColor="@color/home_title"
tools:text="IP192.168.1.100" />
<TextView
android:id="@+id/tvDeviceLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/home_sub_title"
android:textSize="14sp"
tools:text="设备:device_01" />
<!-- 单个秤数据行 -->
<LinearLayout
android:id="@+id/llScaleContainer"
android:layout_width="match_parent"
android:layout_height="120dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginTop="5dp"
android:layout_marginBottom="2dp"
android:paddingStart="30dp"
android:background="@drawable/shape_scale_cell">
<TextView
android:id="@+id/tvAddr"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="22sp"
android:textColor="@color/home_sub_title"
tools:text="秤 1" />
<TextView
android:id="@+id/tvWeight"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textSize="26sp"
android:textStyle="bold"
android:textColor="@color/home_title"
tools:text="100.0 g" />
<TextView
android:id="@+id/tvState"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="18sp"
android:textColor="@color/home_sub_title"
tools:text="稳定" />
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_eb"
android:layout_marginTop="10dp" />
</LinearLayout>
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 18个秤设备的卡片布局,内嵌 RecyclerView -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="10dp">
<TextView
android:id="@+id/tvDeviceIp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:includeFontPadding="false"
android:textColor="@color/home_title"
tools:text="IP192.168.1.100" />
<TextView
android:id="@+id/tvDeviceLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/home_sub_title"
android:textSize="14sp"
tools:text="设备:device_01" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvScales"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:overScrollMode="never" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_eb"
android:layout_marginTop="10dp" />
</LinearLayout>
@@ -1,15 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 设备卡片:竖向排列,显示设备号、IP、以及该设备下所有秤数据 -->
<!-- 2个秤设备卡片布局 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="10dp">
<!-- 设备 IP -->
<TextView
android:id="@+id/tvDeviceIp"
android:layout_width="wrap_content"
@@ -20,7 +17,6 @@
android:textColor="@color/home_title"
tools:text="IP192.168.1.100" />
<!-- 设备号 -->
<TextView
android:id="@+id/tvDeviceLabel"
android:layout_width="wrap_content"
@@ -29,18 +25,18 @@
android:textSize="14sp"
tools:text="设备:device_01" />
<!-- 该设备下所有秤数据行,由代码动态填充 -->
<!-- 水平排列2个秤格子,高度固定 400dp -->
<LinearLayout
android:id="@+id/llScaleContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_height="400dp"
android:orientation="horizontal"
android:layout_marginTop="5dp" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_eb"
android:layout_marginTop="10dp"/>
android:layout_marginTop="10dp" />
</LinearLayout>
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 22个秤设备的卡片布局,内嵌 RecyclerView -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="10dp">
<TextView
android:id="@+id/tvDeviceIp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:includeFontPadding="false"
android:textColor="@color/home_title"
tools:text="IP192.168.1.100" />
<TextView
android:id="@+id/tvDeviceLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/home_sub_title"
android:textSize="14sp"
tools:text="设备:device_01" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvScales"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:overScrollMode="never" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray_eb"
android:layout_marginTop="10dp" />
</LinearLayout>