• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-7166

common/06-May-2025-1,3341,228

entry/06-May-2025-792732

feature/06-May-2025-231,558224,051

figures/06-May-2025-

hvigor/06-May-2025-3836

.gitignoreD06-May-2025133 1212

README_zh.mdD06-May-202519.6 KiB228205

build-profile.json5D06-May-20251.6 KiB7473

hvigorfile.tsD06-May-2025843 225

oh-package-lock.json5D06-May-20251.5 KiB4141

oh-package.json5D06-May-2025834 2624

README_zh.md

1# ArkUI exmaples app
2
3## 背景
4ArkUI是OpenHarmony的UI框架,方便使用者查看组件的效果,以保证原生组件的规范性与一致性。但是目前OpenHarmony社区缺少一个可以让使用者看到UI组件真机预览效果的应用软件。为此,需要设计开发一款ArkUI组件预览应用软件,该应用软件提供直观界面和强大功能,允许调整组件属性并即时预览效果。
5通过ArkUI组件预览应用软件的引入,将会提高使用者的工作效率,促进ArkUI UX标准化,推动UX规范持续进化,最终提升OpenHarmony应用的用户满意度。
6
7## 需求描述&功能描述
8### 需求描述
9- 参考[Docs](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/Readme-CN.md) ArkTS组件,分批次实现组件的UI效果预览功能
10- 实现每个组件的属性与事件设置功能,用户设置不同的属性或触发不同的事件,都可以实时在真机上预览到对应的UI效果
11- 普通组件需要预览的属性包含通用属性/组件属性/构造器参数
12- 高级组件需要预览的属性包含组件属性/构造器参数
13- 注册组件的事件,并将事件信息打印到UI界面
14- 系统接口不需要验证
15- 完成开发后,需要将代码合入到[arkui_ace_engin](https://gitee.com/openharmony/arkui_ace_engine/tree/master/examples/components)
16
17### 功能描述
18- 进入应用后,通过列表选择需要预览的组件
19- <img src="figures/app_page1.png" width="200" height="354">
20- 进入组件预览页后,可以通过页面右上角按钮打开参数列表设置属性
21- <img src="figures/app_page2.png" width="200" height="354">
22- 事件监听信息会打印到UI界面
23- <img src="figures/app_page3.png" width="200" height="354">
24
25## 关键设计
26
27### 页面结构
28![关键设计.png](figures%2F%E5%85%B3%E9%94%AE%E8%AE%BE%E8%AE%A1.png)
29- 应用为单页面程序,使用Navigation+NavDestination完成组件列表和组件预览UI的展示
30
31### 属性Block
32- 在common中定义不同类型的属性block,统一组件属性设置项的UI风格
33
34## 模块设计
35
36### 模块设计
37![模块设计图.png](figures%2F%E6%A8%A1%E5%9D%97%E8%AE%BE%E8%AE%A1%E5%9B%BE.png)
38
39
40ArkUI组件预览应用软件包含UI层,业务层,基础层:
41- UI层
42  - 主要页面:组件导航页,组件预览页
43  - 导航菜单:帮助用户迅速导航到需要预览调试的组件
44  - 组件预览:选择需要预览调试的组件后,将进入预览页,展示对应属性的组件真机效果,并提供弹窗,用户可以在弹窗上进行组件的属性设置
45- 基础层
46  - 公共组件:封装可复用的滑动进度条,选择器,复选框,单选框等自定义UI组件
47  - 公共资源:统一定义尺寸,颜色,图片资源等公共资源
48  - 提供字符串处理,日志,数据换算,资源管理等通用工具类
49  - 基础数据模块:封装包含ArkUI组件通用属性的数据基类
50- 业务层
51  - 应用软件根据ArkUI组件分类,定义6个业务模块
52  - 业务模块包含组件属性的数据对象
53
54### 组件信息
55- 行列与堆叠
56  - [Flex](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-flex.md)
57  - [Column](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-column.md)
58  - [Row](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-row.md)
59  - [Stack](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-stack.md)
60  - [RelativeContainer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-relativecontainer.md)
61  - [FolderStack](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-folderstack.md)
62- 栅格与分栏
63  - [GridRow](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-gridrow.md)
64  - [GridCol](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-gridcol.md)
65  - [ColumnSplit](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-columnsplit.md)
66  - [RowSplit](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-rowsplit.md)
67  - [FoldSplitContainer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-FoldSplitContainer.md)
68  - [SideBarContainer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-sidebarcontainer.md)
69- 滚动与滑动
70  - [List](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-list.md)
71  - [ListItem](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-listitem.md)
72  - [ListItemGroup](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-listitemgroup.md)
73  - [Grid](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-grid.md)
74  - [GridItem](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-griditem.md)
75  - [Scroll](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-scroll.md)
76  - [Swiper](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-swiper.md)
77  - [WaterFlow](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-waterflow.md)
78  - [FlowItem](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-flowitem.md)
79  - [ScrollBar](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-scrollbar.md)
80  - [Refresh](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-refresh.md)
81- 导航与切换
82  - [Navigation](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-navigation.md)
83  - [NavDestination](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-navdestination.md)
84  - [Stepper](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-stepper.md)
85  - [StepperItem](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-stepperitem.md)
86  - [Tabs](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-tabs.md)
87  - [TabContent](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-tabcontent.md)
88- 按钮与选择
89  - [Button](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-button.md)
90  - [Toggle](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-toggle.md)
91  - [Checkbox](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-checkbox.md)
92  - [CheckboxGroup](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-checkboxgroup.md)
93  - [CalendarPicker](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-calendarpicker.md)
94  - [DatePicker](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-datepicker.md)
95  - [TextPicker](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-textpicker.md)
96  - [TimePicker](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-timepicker.md)
97  - [Radio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-radio.md)
98  - [Rating](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-rating.md)
99  - [Select](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-select.md)
100  - [Slider](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-slider.md)
101  - [SegmentButton](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-SegmentButton.md)
102- 文本与输入
103  - [Text](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-text.md)
104  - [TextArea](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-textarea.md)
105  - [TextInput](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-textinput.md)
106  - [RichEditor](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md)
107  - [Search](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-search.md)
108  - [Span](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-span.md)
109  - [ImageSpan](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-imagespan.md)
110  - [ContainerSpan](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-containerspan.md)
111  - [SymbolSpan](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md)
112  - [SymbolGlyph](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-symbolGlyph.md)
113  - [Hyperlink](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-hyperlink.md)
114  - [SelectionMenu](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-SelectionMenu.md)
115- 图片与视频
116  - [Image](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-image.md)
117  - [ImageAnimator](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-imageanimator.md)
118- 信息展示
119  - [AlphabetIndexer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-alphabet-indexer.md)
120  - [Badge](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-badge.md)
121  - [Chip](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-Chip.md)
122  - [ChipGroup](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-ChipGroup.md)
123  - [Counter](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-counter.md)
124  - [advanced.Counter](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-Counter.md)
125  - [DataPanel](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-datapanel.md)
126  - [Gauge](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-gauge.md)
127  - [LoadingProgress](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-loadingprogress.md)
128  - [Marquee](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-marquee.md)
129  - [PatternLock](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-patternlock.md)
130  - [Progress](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-progress.md)
131  - [Popup](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ohos-arkui-advanced-Popup.md)
132  - [QRCode](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-qrcode.md)
133  - [TextClock](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-textclock.md)
134  - [TextTimer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-texttimer.md)
135- 空白与分隔
136  - [Blank](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-blank.md)
137  - [Divider](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-divider.md)
138- 菜单
139  - [Menu](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-menu.md)
140  - [MenuItem](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-menuitem.md)
141  - [MenuItemGroup](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-menuitemgroup.md)
142- 弹窗
143  - [警告弹窗 (AlertDialog)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-alert-dialog-box.md)
144  - [列表选择弹窗 (ActionSheet)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-action-sheet.md)
145  - [自定义弹窗 (CustomDialog)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-custom-dialog-box.md)
146  - [日历选择器弹窗 (CalendarPickerDialog)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-calendarpicker-dialog.md)
147  - [日期滑动选择器弹窗 (DatePickerDialog)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-datepicker-dialog.md)
148  - [时间滑动选择器弹窗 (TimePickerDialog)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-timepicker-dialog.md)
149  - [文本滑动选择器弹窗 (TextPickerDialog)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-methods-textpicker-dialog.md)
150  - [全模态(bindContentCover)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-modal-transition.md)
151  - [半模态(bindSheet)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-sheet-transition.md)
152  - [bindPopup(bindPopup)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-popup.md)
153  - [promptAction(promptAction)](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/js-apis-promptAction.md)
154
155
156## 关键流程
157![运行方案.png](figures%2F%E8%BF%90%E8%A1%8C%E6%96%B9%E6%A1%88.png)
158
159- 使用导航组件 Navigation 加载所有组件
160- 用户选择组件后,打开组件对应的NavDestination
161- 定义组件属性值对应的的状态变量
162- 通过设置界面操作修改状态变量,刷新组件UI,完成预览功能
163
164## 文件结构
165## 目录
166### 目录结构
167```
168/foundation/arkui/ace_engine/examples/components
169├── common                                          # 公共能力层目录
170│   └── src/main/ets
171│                 └── components                    # 公共组件
172│                 └── utils                         # 公共工具
173├── features                                        # 公共能力层目录
174│      └── xxxxxx                                   # 分类代码目录,如行列与堆叠
175├── entry
176│      └── src/main/ets
177│                   └── entryability
178│                   └── entrybackupability
179│                   └── pages
180│                         └── index.ets               # 首页
181```
182
183## DFX设计
184### 体验性
185- 目标:确保UX预览App提供直观、高效且令人愉悦的用户体验。
186- 措施:
187   - 界面设计:采用简洁的UI设计,确保所有功能一目了然,减少用户认知负担。
188   - 交互设计:优化手势操作,如滑动、点击等,确保流畅且符合用户习惯。
189   - 即时反馈:提供清晰的加载状态、操作反馈和错误提示,增强用户操作的确定性和控制感。
190### 高效开发
191- 目标:提升开发效率,减少开发周期中的错误和重复工作。
192- 措施:
193   - 所有属性设置使用common module定义的通用block组件,提升开发效率
194   - 模块化开发:将App拆分为多个独立的模块,每个模块负责特定的功能,便于团队协作和代码复用。
195   - 自动化测试:集成单元测试和集成测试框架,确保代码质量,减少手动测试的工作量。
196   - 版本控制:使用Git等版本控制系统,管理代码变更,确保团队成员之间的协作顺畅。
197### 可维护性
198- 目标:确保App在发布后易于维护和更新,降低长期维护成本。
199- 措施:
200   - 清晰文档:编写详细的开发文档,包括架构设计图和代码注释等。
201   - 代码质量:遵循编程规范,保持代码清晰、可读和可维护。
202### 可扩展性
203- 目标:确保App能够随着业务需求的变化而灵活扩展。
204- 措施:
205   -  通过配置RouteGroup数组数据新增组件
206
207## 测试设计
208
209- 每个组件对应一个describe,每个属性对应一个it(用例),对组件的属性设置UI进行单元测试
210- UITest用例步骤如下:
211  - 进入组件
212  - 打开属性设置UI
213  - 找到对应的属性block
214  - 进行设置
215  - assert结果
216- 可以通过@ohos.UiTest获取的组件属性,需要assert属性值与用例输入值相等
217- 不可通过@ohos.UiTest获取的组件属性,设置成功即可
218- UITest覆盖率需达到80%-90%
219
220## 规范与要求
221- [JavaScript语言通用编程规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/OpenHarmony-JavaScript-coding-style-guide.md)
222- [OpenHarmony应用TS&JS编程指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/OpenHarmony-Application-Typescript-JavaScript-coding-guide.md)
223- [社区共建合入要求](https://gitee.com/openharmony/applications_app_samples/blob/master/CodeCommitChecklist.md)
224- 应用支持API12标准SDK
225
226
227
228