本文从当前常见的多设备应用场景中,选取社区评论应用作为典型案例,详细阐述“一多”理念在实际开发中的应用。社区评论应用的核心功能包括关注首页和热点页查看。基于这些核心功能,案例实现了关注页、热点页、社交详情、图片详情图片查看和输入评论等典型页面。文章重点介绍关键布局能力及对应实现。当前应用已适配的设备包括:直板机、双折叠(Mate X系列)、三折叠、阔折叠、平板和电脑。
下文将从UX设计、工程管理、页面开发三个方面,系统介绍多设备社区评论在实际开发中的最佳实践,为开发者提供可借鉴的实现思路。
应用的UX设计可参考社交通讯类的多设备响应式设计指南,设计参考图如下所示。

为确保“一多”工程代码的复用性与可维护性,建议开发者采用分层架构组织代码工程。该架构将项目划分为产品定制层(products)、基础特性层(features)和公共能力层(common)三个层级,各层级权责明确且功能独立,为开发者提供了清晰、高效且可扩展的设计方案。关于分层架构的具体设计细节,可参考分层架构设计。
多设备社区评论应用采用推荐的分层架构,将代码工程按products、features、common三个层级组织。各层级设计如下:
工程结构如下:
├──common │ └──commonmulticommunityapplication │ └──src/main │ ├──ets │ │ ├──constants // 公共常量定义 │ │ ├──model // 公共model定义 │ │ ├──utils // 工具类 │ │ └──view // feature公共业务组件 │ └──resources // 公共资源 ├──features │ ├──commonui // product公共业务组件模块 │ │ └──src/main │ │ ├──ets │ │ │ ├──view // product公共业务组件 │ │ │ └──viewmodel // product公共视图模型 │ │ └──resources // 公共业务组件模块资源 │ ├──contentcommunity // 内容社区模块 │ │ └──src/main │ │ ├──ets │ │ │ ├──model // 帖子数据模型 │ │ │ ├──view // 帖子组件 │ │ │ └──viewmodel // 帖子视图模型 │ │ └──resources // 帖子模块资源 │ └──socialcommunity // 社交社区模块 │ └──src/main │ ├──ets │ │ ├──model // 关注者/评论数据模型 │ │ ├──view // 关注者/评论组件 │ │ └──viewmodel // 关注者/评论视图模型 │ └──resources // 社交模块资源 ├──product │ ├──default // 手机/平板设备 │ │ └──src/main │ │ ├──ets │ │ │ ├──entryability // 入口类 │ │ │ ├──entrybackupability // 应用数据备份恢复自定义拓展类 │ │ │ └──pages // 入口页面 │ │ └──resources // 资源文件 │ └──pc // 电脑设备 │ └──src/main │ ├──ets │ │ ├──pages // 入口页面 │ │ ├──pcability // 入口类 │ │ └──pcbackupability // 应用数据备份恢复自定义拓展类 │ └──resources // 资源文件 └──oh-package.json5 // 工程依赖声明
本章介绍如何针对直板机、双折叠(Mate X系列)、三折叠、阔折叠及平板设备上的多设备社区评论,利用“一多”布局能力,实现页面层级“一套代码、多端适配”的目标。同时,阐述这些设备上的窗口适配方案。
适配设备支持全屏、分屏、悬浮窗和自由窗口模式,具体参见窗口模式。其中,分屏模式与悬浮窗无需特殊设计,可通过系统方式进入。应用内监听窗口尺寸变化,通过断点刷新UI,即可自动适配全屏、分屏、悬浮窗和自由窗口模式下的布局。
在module.json5配置文件中将orientation字段设置为follow_desktop(跟随桌面的旋转模式),详情可参考为应用配置旋转策略。
根据UX设计,需实现不同窗口模式(全屏、分屏、悬浮窗、自由窗口)下的沉浸式效果,可参考窗口沉浸式。推荐开发者使用实现沉浸式效果中的组件级沉浸方案(组件设置页面沉浸),同时进行动态安全区避让,确保沉浸式显示效果。自由窗口模式下,使用window.setWindowDecorVisible()把参数设置为false,隐藏标题栏,仅保留右上角三键,使应用页面延伸至标题栏区域,实现沉浸式显示效果。
社区评论应用首页作为业务入口。根据功能设计,关注页相关内容划分为4个区域,效果图如下:
横向断点 | sm | md | lg |
|---|---|---|---|
关注页 |
|
|
|
界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 顶部页签栏 | 使用堆叠容器Stack嵌套自定义组件实现。通过点击或左右滑动切换“关注”与“发现”页签的内容。 |
2 | 全部关注(顶部/侧边) | 使用响应式组件List实现。 |
3 | 社交内容列表 | 使用响应式组件WaterFlow瀑布流容器实现。通过设置columnsTemplate布局列数,以实现在不同设备上展示不同列数。 |
4 | 底部导航栏 | 使用响应式组件HdsTabs (底部页签)实现。通过barFloatingStyle属性设置页签悬浮样式。 |
热点页用于展示当前实时热点内容。根据功能设计,热点页相关内容划分为3个区域,效果图如下:
横向断点 | sm | md | lg |
|---|---|---|---|
热点页 |
|
|
|
界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 顶部页签栏 | 使用堆叠容器Stack嵌套自定义组件实现。通过点击或左右滑动切换“实时”与“本地”页签的内容。 |
2 | 社交内容区 | 使用响应式组件WaterFlow瀑布流容器实现。通过设置columnsTemplate布局列数,以实现在不同设备上展示不同列数。 |
3 | 底部导航栏 | 使用响应式组件HdsTabs (底部页签)实现。通过barFloatingStyle属性设置页签悬浮样式。 |
社交详情页。根据功能设计,社交详情页相关内容划分为4个区域,效果图如下:
横向断点 | sm | md | lg |
|---|---|---|---|
社交详情页 |
|
|
|
界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 顶部标题栏 | 使用响应式组件NavDestination设置title属性实现。在不同的设备宽度下组件自适应占满一屏。 |
2 | 社交内容区+图片展示区 | 常用基础组件+使用嵌套网格容器Grid实现。通过设置columnsTemplate布局列数,以实现在不同设备上展示不同列数。 |
3 | 社交评论区 | 使用可滚动的容器组件Scroll实现。 |
4 | 底部互动栏 | 使用响应式组件HdsTabs (底部页签)实现。通过barFloatingStyle属性设置页签悬浮样式。 |
图片详情页。根据功能设计,图片详情页相关内容单独一个区域,效果图如下:
横向断点 | sm | md | lg |
|---|---|---|---|
图片详情页 |
|
|
|
界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 图片展示页 | 图片自适应并占据整个页面展示。 |
社区评论应用首页作为业务入口,关注页相关内容划分为4个区域,效果图如下:

界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 顶部页签栏 | 同移动端关注页对应区域的布局实现方案一致。 |
2 | 全部关注 | |
3 | 社交内容列表 | |
4 | 电脑设备左侧导航栏 | 使用侧边栏容器SideBarContainer实现。通过设置showSidebar属性,确保侧边栏固定显示。 |
热点页用于展示当前实时热点内容。根据功能设计,热点页相关内容划分为3个区域,效果图如下:

界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 顶部页签栏 | 同移动端热点页对应区域的布局实现方案一致。 |
2 | 社交内容区+社区评论区 | |
3 | 电脑设备左侧导航栏 | 使用侧边栏容器SideBarContainer实现。通过设置showSidebar属性,确保侧边栏固定显示。 |
根据功能设计,社交详情页相关内容划分为5个区域,效果图如下:

界面开发
具体介绍及实现方案如下表所示:
区域编号 | 简介 | 实现方案 |
|---|---|---|
1 | 顶部标题栏 | 同移动端社交详情页对应区域的布局实现方案一致。 |
2 | 社交内容区+图片展示区 | |
3 | 社交评论区 | |
4 | 底部互动栏 | |
5 | 电脑设备左侧导航栏 | 使用侧边栏容器SideBarContainer实现。通过设置showSidebar属性,确保侧边栏固定显示。 |