页面预览

前言

宠物档案页萌宠日记 中展示宠物 核心信息 的页面,包含 宠物头像名称品种年龄基本信息列表成长记录 等模块。该页面采用 Scroll 嵌套 Column 的布局模式,配合 卡片式设计,将宠物信息清晰、有层次地呈现给用户。

本文将从 萌宠日记 的 PetProfilePage 实现出发,深入解析档案页的头像设计、布局结构、卡片组织,以及如何通过视觉层次突出宠物核心信息。

一、档案页整体布局

1.1 页面结构

┌─────────────────────────────────────┐
│  Scroll (可滚动)                     │
│  ┌─────────────────────────────────┐ │
│  │  ┌───────────────────────────┐  │ │
│  │  │  宠物头部卡片              │  │ │
│  │  │  ┌────┐ ┌──────────────┐  │  │ │
│  │  │  │ 头像│ │  豆豆    ♂  │  │  │ │
│  │  │  │80×80│ │  比熊犬·男孩 │  │  │ │
│  │  │  │     │ │  2岁3个月   │  │  │ │
│  │  │  └────┘ └──────────────┘  │  │ │
│  │  │                       ✏️  │  │ │
│  │  └───────────────────────────┘  │ │
│  │  ┌───────────────────────────┐  │ │
│  │  │  基本信息卡片              │  │ │
│  │  │  生日: 2022-02-14        │  │ │
│  │  │  ───────────────────     │  │ │
│  │  │  到家日: 2022-04-20      │  │ │
│  │  │  ───────────────────     │  │ │
│  │  │  体重: 4.5 kg            │  │ │
│  │  │  ...                     │  │ │
│  │  └───────────────────────────┘  │ │
│  │  ┌───────────────────────────┐  │ │
│  │  │  成长记录卡片              │  │ │
│  │  │  [幼年] [6个月] [1岁] [2岁]│  │ │
│  │  └───────────────────────────┘  │ │
│  └─────────────────────────────────┘ │
└─────────────────────────────────────┘

1.2 核心代码

// PetProfilePage.ets — 档案页布局
@Entry
@Component
export struct PetProfilePage {
  build() {
    Scroll() {
      Column({ space: 16 }) {
        // 1. 宠物头部卡片
        this.PetHeaderCard()

        // 2. 基本信息卡片
        this.BasicInfoCard()

        // 3. 成长记录卡片
        this.GrowthRecordCard()
      }
      .padding({ left: 16, right: 16, top: 16, bottom: 24 })
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#FFF8F0')
    .scrollBar(BarState.Off)
  }
}

提示:宠物档案页的布局结构与首页一脉相承,采用 Scroll + Column + 卡片 的模式。每个卡片独立封装为 @Builder,代码清晰、易于维护。

二、宠物头部卡片

2.1 完整实现

// 宠物头部卡片
@Builder
PetHeaderCard() {
  Column() {
    Row({ space: 16 }) {
      // 头像
      Column() {
        Text('')
          .fontSize(48)
      }
      .width(80)
      .height(80)
      .backgroundColor('#FFF3E0')
      .borderRadius(40)
      .justifyContent(FlexAlign.Center)

      // 信息
      Column({ space: 4 }) {
        Row({ space: 8 }) {
          Text('豆豆')
            .fontSize(22)
            .fontWeight(FontWeight.Bold)
            .fontColor('#333333')
          Text('♂')
            .fontSize(12)
            .fontColor('#42A5F5')
            .backgroundColor('#E3F2FD')
            .padding({ left: 6, right: 6, top: 2, bottom: 2 })
            .borderRadius(8)
        }
        Text('比熊犬 · 男孩')
          .fontSize(13)
          .fontColor('#999999')
        Text('2岁3个月')
          .fontSize(13)
          .fontColor('#999999')
      }
      .alignItems(HorizontalAlign.Start)

      Blank()

      Text('✏️')
        .fontSize(20)
        .fontColor('#F5A623')
    }
    .width('100%')
    .padding(16)
  }
  .width('100%')
  .backgroundColor('#FFFFFF')
  .borderRadius(16)
  .shadow({ radius: 4, color: '#10000000', offsetY: 2 })
}

2.2 与首页宠物卡片的对比

对比维度 首页宠物卡片 档案页宠物卡片
头像尺寸 64×64vp 80×80vp(更大)
名称字号 20fp 22fp(更大)
卡片圆角 16vp 16vp(一致)
阴影 有(一致)
编辑按钮 有(一致)

三、头像尺寸设计

3.1 头像尺寸对比

// 首页头像 — 64×64
Column() {
  Text('').fontSize(40)
}
.width(64).height(64)
.borderRadius(32)

// 档案页头像 — 80×80
Column() {
  Text('').fontSize(48)
}
.width(80).height(80)
.borderRadius(40)

3.2 头像尺寸选择

使用场景 尺寸 borderRadius 说明
首页卡片 64×64 32 紧凑展示
档案页头部 80×80 40 突出展示
个人中心 64×64 32 中等大小
社区动态 36×36 18 小尺寸列表

四、信息布局细节

4.1 信息层级

Column({ space: 4 }) {
  // 第一行:名称 + 性别标签
  Row({ space: 8 }) {
    Text('豆豆').fontSize(22).fontWeight(FontWeight.Bold)
    Text('♂').fontSize(12).fontColor('#42A5F5')
  }

  // 第二行:品种
  Text('比熊犬 · 男孩').fontSize(13).fontColor('#999999')

  // 第三行:年龄
  Text('2岁3个月').fontSize(13).fontColor('#999999')
}
.alignItems(HorizontalAlign.Start)

4.2 信息层级设计

层级 内容 字号 字重 颜色 重要性
第一层 宠物名称 22fp Bold 深灰 最高
第一层 性别标签 12fp Normal 蓝色 辅助
第二层 品种 · 性别 13fp Normal 灰色 中等
第三层 年龄 13fp Normal 灰色 一般

五、卡片容器设计

5.1 卡片统一样式

// 卡片容器统一样式
.width('100%')
.backgroundColor('#FFFFFF')
.borderRadius(16)
.shadow({ radius: 4, color: '#10000000', offsetY: 2 })

5.2 卡片间距

// 卡片之间的间距由 Column 的 space 控制
Column({ space: 16 }) {
  this.PetHeaderCard()    // 间距 16vp
  this.BasicInfoCard()    // 间距 16vp
  this.GrowthRecordCard() // 底部 24vp padding
}

六、页面边距

6.1 内外边距

// 整个页面的边距
Scroll() {
  Column({ space: 16 }) {
    // 卡片...
  }
  .padding({ left: 16, right: 16, top: 16, bottom: 24 })
}
边距位置 说明
左右边距 16vp 与屏幕边缘距离
顶部边距 16vp 与导航栏距离
底部边距 24vp 底部留白,避免贴底
卡片间距 16vp 卡片之间的间距

七、头像图片加载

7.1 真实图片加载

// 使用 Image 组件加载真实头像
Column() {
  Image($r('app.media.pet_avatar'))
    .width(80)
    .height(80)
    .borderRadius(40)
    .objectFit(ImageFit.Cover)  // 裁剪填充,保持比例
    .onLoad(() => {
      console.log('Avatar loaded')
    })
    .onError(() => {
      // 加载失败显示占位 Emoji
      Text('🐶').fontSize(48)
    })
}

7.2 图片加载策略

策略 说明 实现
占位图 加载时显示默认头像 Emoji 占位
缓存 避免重复加载 Image 组件默认缓存
错误处理 加载失败显示备选 onError 回调
裁剪模式 保持比例裁剪 objectFit: Cover

八、响应式适配

8.1 不同屏幕适配

// 根据屏幕宽度调整卡片样式
@StorageProp('screenWidth') screenWidth: number = 360

getCardPadding(): number {
  return this.screenWidth >= 600 ? 24 : 16
}

getAvatarSize(): number {
  return this.screenWidth >= 600 ? 100 : 80
}

8.2 适配方案

屏幕宽度 头像尺寸 卡片内边距 字号
< 360vp 72×72 12vp 20fp
360-414vp 80×80 16vp 22fp
414-600vp 88×88 20vp 24fp
> 600vp 100×100 24vp 26fp

九、无障碍适配

9.1 头像无障碍

Column() {
  Image($r('app.media.pet_avatar'))
    .width(80).height(80).borderRadius(40)
}
.accessibilityText('宠物头像:豆豆')

9.2 页面无障碍

// 为整个卡片添加无障碍描述
Column() {
  // 卡片内容...
}
.accessibilityText('宠物信息卡片,名称豆豆,品种比熊犬,年龄2岁3个月')

十、最佳实践

10.1 设计原则

有序列表 — 档案页设计的 5 个原则:

  1. 头像突出:宠物头像在页面上方,尺寸适中,一目了然
  2. 信息分层:名称 > 品种 > 年龄,按重要性递减排列
  3. 卡片统一:所有卡片使用相同的圆角、阴影、背景色
  4. 间距合理:卡片间距 16vp,内边距 16vp,视觉舒适
  5. 可编辑提示:编辑按钮使用铅笔图标,位置在右上角

10.2 萌宠日记档案页设计总结

设计要素 说明
头像尺寸 80×80vp 比首页大,突出显示
名称字号 22fp Bold 页面最突出的文字
卡片圆角 16vp 统一圆角风格
卡片阴影 radius: 4, offsetY: 2 轻微阴影
页面背景 #FFF8F0 暖白色
卡片背景 #FFFFFF 纯白色
左右边距 16vp 统一标准

总结

本文从 萌宠日记宠物档案页 布局实现出发,深入解析了档案页设计的完整方法:

  1. 页面结构:Scroll + Column + 三张卡片
  2. 头部卡片:80×80 圆形头像 + 名称 + 品种 + 年龄
  3. 头像尺寸:不同场景使用不同尺寸(64/80/36)
  4. 信息层级:三级信息展示,字号和颜色区分重要性
  5. 卡片容器:统一圆角、阴影、背景色
  6. 页面边距:16vp 标准边距,视觉舒适
  7. 图片加载:占位图、缓存、错误处理
  8. 响应式适配:不同屏幕尺寸的自适应方案

宠物档案页是萌宠日记中信息展示最集中的页面之一,卡片式布局和信息分层设计为用户提供了清晰的数据浏览体验。

下一篇我们将深入 基本信息列表与 Divider 分隔线,解析档案页中基本信息列表的实现。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐