HarmonyOS7 表格在手机上要换思路:ArkUI/ArkTS 实战拆解

文章目录

      • 前言
      • 为什么这个问题经常被写乱
      • 表格到卡片的映射
      • 改造步骤
      • ArkUI/ArkTS 示例
      • 关键代码说明
      • 字段取舍示例
      • 移动端表格先保主线
      • 小结

前言

手机屏幕不适合硬塞 PC 表格。列多了以后,字号变小、横向滚动难用、关键数据还被挤到看不见的位置。我在 HarmonyOS7 里做账单、库存、审批明细时,更倾向于把表格改成主次分明的列表卡片

移动端数据展示不是缩小表格,而是重新排序信息优先级。

这篇以“账单明细”为例:PC 表格里可能有单号、名称、金额、状态、时间、发票、操作七八列,但手机上真正优先的是“这是什么账单、多少钱、现在什么状态”。

为什么这个问题经常被写乱

表格在手机上要换思路 这类内容很容易被写成“代码能跑就算讲完了”,但对初学者来说,这恰恰是最不够的地方。真正让人卡住的,往往不是某个组件名记不住,而是不知道这段代码为什么要这样拆、状态为什么要这样放、以后需求变化时应该从哪里改。

所以这篇文章不只想给你一个能跑的例子,更想把背后的判断过程讲清楚。你只要把这个判断过程吃透,后面自己改页面、补需求、查问题时,心里会稳很多。

表格到卡片的映射

表格列移动端位置原因
名称/单号主标题用户先识别对象
金额/状态右侧强调决策信息
时间/备注次级文案辅助判断
操作底部按钮避免误触

步骤:先找出用户最关心的两列,再把其余字段分组展示。不要一开始就追求“所有列都露出来”。

改造步骤

  1. 从原表格里挑出主识别字段,比如账单名称或审批单号。
  2. 找出决策字段,比如金额、库存余量、审批状态。
  3. 把低频字段放到次级文案或详情页。

  1. 每张卡片只保留 1 个主要操作。
  2. List承载卡片,保证长列表滚动性能和 key 稳定。

ArkUI/ArkTS 示例

classBillItem{id:number=0name:string=''amount:string=''status:string=''time:string=''constructor(id:number,name:string,amount:string,status:string,time:string){this.id=idthis.name=namethis.amount=amountthis.status=statusthis.time=time}}@Entry@Componentstruct MobileTablePage{@Statebills:BillItem[]=[newBillItem(1,'企业云服务续费','¥1280.00','已支付','07-10 14:20'),newBillItem(2,'短信通知套餐','¥199.00','待开票','07-09 09:11'),newBillItem(3,'对象存储流量','¥86.50','已退款','07-08 18:02')]@BuilderBillCard(item:BillItem){Column({space:10}){Row(){Column({space:4}){Text(item.name).fontSize(16).fontWeight(FontWeight.Medium)Text(item.time).fontSize(12).fontColor('#777777')}.alignItems(HorizontalAlign.Start)Blank()Column({space:4}){Text(item.amount).fontSize(17).fontWeight(FontWeight.Bold)Text(item.status).fontSize(12).fontColor(item.status==='已退款'?'#C92A2A':'#2F9E44')}.alignItems(HorizontalAlign.End)}Divider().color('#EEEEEE')Row(){Text(`账单编号:BILL-${item.id}`).fontSize(12).fontColor('#666666')Blank()Button('详情').height(30).buttonStyle(ButtonStyleMode.TEXTUAL)}}.padding(14).backgroundColor('#FFFFFF').borderRadius(10)}build(){Column({space:12}){Text('账单明细').fontSize(24).fontWeight(FontWeight.Bold)Text('按移动端阅读顺序重排字段').fontSize(13).fontColor('#777777')List({space:10}){ForEach(this.bills,(item:BillItem)=>{ListItem(){this.BillCard(item)}},(item:BillItem)=>item.id.toString())}.layoutWeight(1)}.padding(16).backgroundColor('#F5F6FA').height('100%')}}

关键代码说明

BillCard()把原来的多列数据拆成标题区、金额状态区和辅助信息区,比横向表格更适合单手阅读。

金额和状态右对齐,因为它们是用户做判断时最常看的字段。

操作按钮放底部,不会和数据挤在一起,也减少误触。

字段取舍示例

原始列卡片展示说明
账单名称第一行左侧主识别信息
金额第一行右侧需要强调
状态金额下方和金额形成判断组合
时间标题下方辅助排序和核对
发票状态详情页或标签非所有场景都必须首屏展示

如果用户确实需要横向对比大量数字,移动端也可以提供筛选和详情页,而不是强迫用户在一张小表格里横滑。

移动端表格先保主线

把 PC 表格搬到手机上时,先别急着保留所有列。真正要优先展示的是主识别信息和决策信息,比如账单名称、金额、状态。其他字段可以放到次级文案、标签或详情页。

操作区也要从数据区里拿出来。详情按钮放在卡片底部,比挤在金额旁边更稳,误触概率也更低。

长列表仍然要使用稳定 key。账单明细经常分页、筛选、刷新,item.id比数组下标可靠得多。

小结

HarmonyOS7 移动端页面要尊重屏幕尺寸。表格不是不能做,而是要先问:用户在手机上到底想先看哪两个字段?