ArkUI 组件预览(@Preview)自学指南:从“能预览”到“预览体系化”
做 ArkTS / ArkUI 时,把“运行-看效果”的成本降下来,最省事的方式之一就是用 DevEco 的预览器(Previewer)。它能让你在不装包、不跑真机的情况下,快速验证 UI 结构、布局、样式与适配问题。 组件预览的核心价值不是“看一眼 UI”,而是把预览变成一种工作流:每写一个组件,就配一组稳定可复用的预览场景,后续调样式、做适配、做重构,都能快速回归验证。 很多同学一开始会把这两种预览混在一起用,导致预览行为“看起来不对”。 你如果正在做组件化(卡片、列表项、通用按钮、弹窗、空状态等),优先用组件预览,效率更高。 如果预览器打不开、白屏、显示异常,先按这几条排: 建议你先用一个不依赖外部参数、状态可控的组件验证预览链路,确保预览器能正常工作: 一个源文件里预览太多,会让维护成本上升,也容易让预览器负担变大。建议一个文件控制在“够用就好”。 当你开始做多端适配或国际化时, 常用参数解释(按实际开发最常用的理解方式): 示例(传参预览): 我更建议你别每次临时改参数,而是固定三套预览,当成组件的“标准工位”: 当你把这三套组合固定下来,后面组件改版基本就是“一眼能看出问题”。 遇到预览器不显示,按这个顺序排,命中率很高: 组件预览最爽的一点是:它能把“改一点 → 看一下 → 再改一点”的循环速度拉到极致。 当你开始把预览当成固定资产(多端、语言、方向、圆屏都覆盖),你写组件会越来越像做“可回归的模块开发”:1)先搞清:页面预览 vs 组件预览(别混用)
@Entry,适合看整体页面结构与导航。@Preview 装饰器触发,更适合做组件库、模块化 UI、局部迭代调试。2)环境准备清单(预览器能不能跑,先看这几项)
3)@Preview 最小可用写法:先跑通“无参组件”
@Preview
@Component
struct HelloPreview {
@State message: string = 'default Preview';
build() {
Column() {
Text(this.message).fontSize(40).fontWeight(FontWeight.Bold)
}
.width('100%')
.height('100%')
}
}小提醒:别在一个文件里堆太多预览
4)PreviewParams:把预览“调成你想要的设备/语言/方向”
@Preview({...}) 的参数就特别有用。你可以把预览设备的关键属性固定下来,比如屏幕大小、语言、方向、圆屏等。title:预览名称,同文件多个预览时用来区分。width / height:预览设备分辨率(px),快速模拟不同屏幕尺寸。dpi:屏幕密度,用于验证字体/间距在不同密度下的表现。locale:语言地区,如 zh_CN、en_US,用于验证国际化布局溢出。colorMode:亮暗模式(注意不同设备类型可能有默认限制)。deviceType:设备类型,如 Phone/Tablet/TV/Wearable,用于多端渲染差异验证。orientation:横竖屏,portrait 或 landscape。roundScreen:是否圆屏,用于手表类布局验证。@Preview({
title: 'PreviewParams',
width: 540,
height: 1170,
locale: 'zh_CN',
orientation: 'portrait'
})
@Component
struct Test {
@State message: string = 'PreviewParams';
build() {
Column() {
Text(this.message).fontSize(36).fontWeight(FontWeight.Bold)
}
.width('100%')
.height('100%')
}
}5)实战建议:把预览做成“3 套固定组合”,效率会高很多
主战场:布局、字号、间距先在这里定。
很容易暴露英文文案溢出、按钮变形、间距不够等问题。
专门抓边距、圆角、安全区、内容被裁切的问题。6)“预览不显示/白屏”排查口诀(社区里最常见)
先临时注释 Web/Video/XComponent 等组件,验证是不是它们导致的空白。
例如必须等网络请求、路由参数、注入对象才能渲染。预览模式下经常会卡住或无内容。
更稳的做法是:用“预览包装组件”把入参写死,让预览组件能独立渲染。
比如路径、资源引用方式不规范,导致预览场景拿不到资源。
预览器资源没下载好、SDK 版本不匹配,都会导致预览异常。把 @Preview 当成“组件单测”,你会越写越快
改动可控、验证快速、适配心里有底。