目录

多设备即时通讯界面

概述

本文从当前常见的多设备应用场景中,选取即时通讯行业应用作为典型案例,详细介绍”一多”在实际开发中的应用。

即时通讯应用的核心功能是用户交互,主要功能模块包含对话聊天、通讯录和社交圈等交互功能。开发者在开发”一多”应用时,经常面临多端适配问题。本文针对即时通讯应用的常见多端适配问题,提供解决方案。

应用当前已适配的设备包括:直板机、双折叠(Mate X系列)、三折叠、阔折叠、平板和电脑。

阅读本文前,开发者需熟悉ArkUI(方舟UI框架)和一次开发,多端部署概览相关知识。

下文将从UX设计、工程管理、页面开发三个角度,介绍即时通讯应用在多设备开发中的最佳实践。

UX设计

即时通讯应用的UX设计可参考社交通讯类多设备响应式设计指南的社交通讯类章节,设计参考图如下所示。

工程管理

考虑到“一多”工程代码的复用性和可维护性,推荐开发者使用分层架构组织代码工程。分层架构将项目工程划分为产品定制层(products)、基础特性层(features)和公共能力层(common)三个层级,各层级权责明确且功能独立,为开发者提供了一套清晰、高效且可扩展的设计架构。关于分层架构的具体设计细节,可参考分层架构设计。

[h2]创建工程

建议开发者参考多设备工程部署与发布相关内容,掌握分层架构工程的创建与配置方法后,创建出模板项目工程。然后根据即时通讯应用的开发需求进行针对性修改,确保工程架构贴合实际业务需求。

[h2]工程结构

即时通讯应用根据推荐的分层架构按照products、features、common三个层级组织代码工程。每个层级的设计如下:

工程结构如下:

├──common
│  └──commonmultidevicecommunication                                     
│     └──src/main
│        ├──ets
│        │  ├──constants                      // 公共常量定义
│        │  ├──model                          // 公共model定义
│        │  ├──utils                          // 工具类
│        │  └──view                           // feature公共业务组件
│        └──resources                         // 公共资源
├──features                                   
│  ├──commonui                                // products公共业务组件模块
│  │  └──src/main
│  │     ├──ets
│  │     │  └──view                           // products公共业务组件
│  │     └──resources                         // 静态路由表资源
│  ├──message                                 // 消息模块
│  │  └──src/main
│  │     ├──ets
│  │     │  ├──model                          // 消息模块数据模型
│  │     │  ├──view                           // 消息模块组件
│  │     │  └──viewmodel                      // 消息模块视图模型
│  │     └──resources                         // 消息模块资源
│  ├──social                                  // 社交模块
│  │  └──src/main
│  │     ├──ets
│  │     │  ├──model                          // 社交模块数据模型
│  │     │  ├──view                           // 社交模块组件
│  │     │  └──viewmodel                      // 社交模块视图模型
│  │     └──resources                         // 社交模块资源
│  └──user                                    // 个人主页模块
│     └──src/main
│        ├──ets
│        │  ├──model                          // 个人主页模块数据模型
│        │  ├──view                           // 个人主页模块组件
│        │  └──viewmodel                      // 个人主页模块视图模型
│        └──resources                         // 个人主页模块资源
└──products                                    
  ├──default                                  // 手机/平板设备
  │  └──src/main
  │     ├──ets
  │     │  ├──entryability                    // 入口类
  │     │  ├──entrybackupability              // 应用数据备份恢复自定义拓展类
  │     │  └──pages                           // 入口页面
  │     └──resources                          // 资源文件
  └──pc                                       // PC设备
    └──src/main
       ├──ets
       │  ├──pages                           // 入口页面
       │  ├──pcability                       // 入口类
       │  └──pcbackupability                 // 应用数据备份恢复自定义拓展类
       └──resources                          // 资源文件

移动端页面

本章介绍如何针对直板机、双折叠(Mate X系列)、三折叠、阔折叠和平板设备上的即时通讯应用,使用“一多”布局能力,实现页面层级“一套代码、多端适配”的目标。同时,介绍这些设备上的窗口适配方案。

[h2]窗口适配

[h2]消息页

即时通讯应用消息页主要用于展示消息列表、消息详情,满足用户聊天需求。根据功能设计,将消息页相关内容划分为5个区域,效果如下:

横向断点

sm

md

lg

消息页

界面开发

具体介绍及实现方案如下表所示:

区域编号

简介

实现方案

1

顶部标题栏

使用响应式组件HdsNavDestination (导航子页面容器)设置titleBar属性实现。在不同的设备宽度下组件自适应占满一屏。

2

消息列表

使用响应式组件List实现。通过响应式环境变量监听窗口尺寸布局断点(WindowSizeLayoutBreakpointInfo)变化,动态调整列表边距。

3

底部导航栏

使用响应式组件HdsTabs (底部页签)实现。通过barFloatingStyle属性设置页签悬浮样式。

4

消息详情

使用响应式组件Scroll实现。通过设置layoutWeight属性,当设备高度小于内容高度时,可滑动查看消息信息。

5

消息输入区域

使用沿水平方向布局容器组件Row嵌套媒体组件image实现。通过设置layoutWeight属性,消息输入框在不同断点下自适应拉伸。

[h2]通讯录页

即时通讯应用通讯录页主要用于展示通讯录列表、联系人主页,满足查看联系人需求。根据功能设计,将通讯录页相关内容划分为5个区域,效果如下:

横向断点

sm

md

lg

通讯录页

界面开发

具体介绍及实现方案如下表所示:

区域编号

简介

实现方案

1

顶部标题栏

使用响应式组件HdsNavDestination (导航子页面容器)设置titleBar属性实现。在不同的设备宽度下组件自适应占满一屏。

2

搜索栏

使用沿水平方向布局容器组件Row实现。通过设置layoutWeight属性,搜索框在不同断点下自适应拉伸。通过监听断点变化,实现响应式排列。

3

通讯录列表

使用堆叠容器Stack嵌套响应式组件List和AlphabetIndexer实现。通过监听断点变化,动态调整列表边距。

4

底部导航栏

使用响应式组件HdsTabs (底部页签)实现。通过barFloatingStyle属性设置页签悬浮样式。

5

联系人主页

使用响应式组件Scroll嵌套网格容器Grid实现。通过Grid的aspectRatio约束和设置image组件objectFit,使得Grid保持3列并横向自适应一屏。

[h2]朋友圈页

即时通讯应用朋友圈页主要用于展示朋友圈列表,满足查看朋友动态分享的需求。根据功能设计,将朋友圈页相关内容划分为3个区域,效果如下:

横向断点

sm

md

lg

朋友圈页

界面开发

具体介绍及实现方案如下表所示:

区域编号

简介

实现方案

1

顶部标题栏

使用响应式组件HdsNavDestination设置titleBar属性实现。在不同的设备宽度下组件自适应占满一屏。

2

朋友圈列表

使用响应式组件List嵌套网格容器Grid实现。通过Grid的aspectRatio约束和设置image组件objectFit,使得Grid保持3列并横向自适应一屏。

3

底部导航栏

使用响应式组件HdsTabs (底部页签)实现。通过barFloatingStyle属性设置页签悬浮样式。

电脑端页面

本章介绍如何基于现有移动端界面开发方案,实现布局复用,高效完成电脑设备上即时通讯应用的界面开发。

[h2]消息页

即时通讯应用消息页主要用于展示消息列表、消息详情,满足用户聊天需求。根据功能设计,将消息页相关内容划分为5个区域,效果如下:

界面开发

具体介绍及实现方案如下表所示:

区域编号

简介

实现方案

1

顶部标题栏

复用移动端设备布局方案,同移动端消息页对应区域的布局实现方案一致。

2

消息列表

3

消息详情

4

消息输入区域

5

PC设备左侧导航栏

使用侧边栏容器SideBarContainer实现。通过设置showSidebar属性,确保侧边栏固定显示。

[h2]通讯录页

即时通讯应用通讯录页主要用于展示通讯录列表、联系人主页,满足查看联系人需求。根据功能设计,将通讯录页相关内容划分为5个区域,效果如下:

界面开发

具体介绍及实现方案如下表所示:

区域编号

简介

实现方案

1

顶部标题栏

复用移动端设备布局方案,同移动端通讯录页对应区域的布局实现方案一致。

2

搜索栏

3

通讯录列表

4

联系人主页

5

PC设备左侧导航栏

使用侧边栏容器SideBarContainer实现。通过设置showSideBar属性,确保侧边栏固定显示。

[h2]朋友圈页

即时通讯应用朋友圈页主要用于展示朋友圈列表,满足查看朋友动态分享的需求。根据功能设计,将朋友圈页相关内容划分为4个区域,效果如下:

界面开发

具体介绍及实现方案如下表所示:

区域编号

简介

实现方案

1

PC设备左侧导航栏

使用侧边栏容器SideBarContainer实现。通过设置showSidebar属性,确保侧边栏固定显示。

2

系统自由多窗操作栏

使用setWindowDecorVisible设置隐藏标题栏,仅保留右上角三键。

3

朋友圈列表

复用移动端设备布局方案,同移动端朋友圈页对应朋友圈列表布局实现方案一致。

示例代码