【HarmonyOS 5.0.0 或以上】构建图文卡片组件 InfoCard:适配图文信息展示 / 操作按钮组合 / 插槽扩展

🎯 目标

封装一个通用信息卡片组件 InfoCard,适用于:

  • 内容展示卡片(如文章、商品、用户信息)

  • 图 + 文 + 操作按钮结构统一

  • 卡片具备圆角、阴影、点击反馈等样式

  • 支持插槽式标题、底部按钮扩展

  • 支持加载状态、内容折叠、多列布局等


🧱 样式结构示意

╭────────────╮
│ 🖼 图 | 标题 + 简介         │
│     | 描述内容              │
│     | [查看详情] [删除]     │
╰────────────╯

🧰 组件实现:InfoCard.ets

@Component
export struct InfoCard {
  @Prop image: string = ''
  @Prop title: string = ''
  @Prop description: string = ''
  @Prop actions: Array<{ text: string; onClick: () => void }> = []

  build() {
    Row()
      .padding(12)
      .backgroundColor('#fff')
      .borderRadius(12)
      .shadow({ radius: 6, color: '#00000010' })
      .alignItems(VerticalAlign.Top)
      .width('100%') {
      // 左侧图片
      Image(this.image)
        .width(80)
        .height(80)
        .borderRadius(8)
        .objectFit(ImageFit.Cover)

      // 右侧内容区
      Column()
        .margin({ left: 12 })
        .flexGrow(1)
        .justifyContent(FlexAlign.SpaceBetween) {
        Column({ space: 6 }) {
          Text(this.title).fontSize(16).fontWeight(FontWeight.Bold).fontColor('#333')
          Text(this.description).fontSize(13).fontColor('#666').maxLines(2).textOverflow({ overflow: TextOverflow.Ellipsis })
        }

        if (this.actions.length > 0) {
          Row({ space: 12 }).margin({ top: 8 }) {
            this.actions.forEach(act =>
              Button(act.text)
                .type(ButtonType.Normal)
                .fontSize(12)
                .onClick(() => act.onClick())
            )
          }
        }
      }
    }
  }
}

📦 使用示例

@Entry
@Component
struct DemoInfoCard {
  build() {
    Column({ space: 20 }) {
      InfoCard({
        image: 'https://example.com/book.jpg',
        title: 'HarmonyOS 入门指南',
        description: '从安装到实战,全面掌握鸿蒙应用开发核心能力。',
        actions: [
          { text: '查看详情', onClick: () => ToastManager.show('查看详情') },
          { text: '删除', onClick: () => ToastManager.show('已删除', 'warning') }
        ]
      })

      InfoCard({
        image: 'https://example.com/avatar.jpg',
        title: '张三 · 开发者',
        description: '擅长 ArkTS / JS / HarmonyOS 分布式组件开发。',
        actions: [
          { text: '发消息', onClick: () => ToastManager.show('发起对话') }
        ]
      })
    }.padding(20)
  }
}

✨ 可扩展能力建议

功能说明
加载骨架屏支持接入 Loading Skeleton 占位卡片
卡片状态切换支持(禁用/选中)支持状态样式切换,添加选中高亮/不可点击样式
多列卡片布局支持Wrap/Grid 搭配呈现多列卡片
插槽扩展内容区域支持插入 tags、评级星星、价格、badge 等附加信息

📘 下一篇预告

第34篇:【HarmonyOS 5.0.0 或以上】构建分页容器组件 PageContainer:支持分页请求 / 上拉加载 / 空数据处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值