当然可以!以下是一篇排版美观、结构清晰、内容实用 的鸿蒙开发进阶教程,聚焦 页面布局与 UI 美化技巧,采用整齐的标题层级、代码块高亮、表格对齐和视觉留白,适合直接用于技术博客或学习文档。
🎨 鸿蒙(HarmonyOS)UI 美化实战:打造美观、响应式的应用界面
适用对象 :已掌握 ArkTS 基础与声明式 UI 的开发者
目标 :学会使用鸿蒙内置能力实现专业级页面布局、主题适配与视觉优化
关键词:ArkUI、响应式布局、主题色、圆角阴影、动效、多设备适配

一、为什么 UI 美观如此重要?
在鸿蒙生态中,"一次开发,多端部署" 是核心理念。但不同设备(手机、平板、手表、智慧屏)屏幕尺寸、交互方式差异巨大。
一个结构合理、视觉统一、体验流畅的 UI,不仅能提升用户满意度,还能显著降低多端适配成本。
✅ 鸿蒙官方设计语言:Harmony Design System(简洁、自然、一致)
二、基础美化四要素
要让页面"看起来专业",只需关注以下四个维度:
| 要素 | 说明 | 鸿蒙实现方式 |
|---|---|---|
| 1. 色彩系统 | 主色、辅助色、文字色统一 | @ohos.graphics.color + 主题配置 |
| 2. 圆角与阴影 | 提升层次感与现代感 | .borderRadius() + .shadow() |
| 3. 间距与对齐 | 视觉呼吸感与秩序感 | margin / padding + Flex 对齐属性 |
| 4. 动效反馈 | 增强交互感知 | animateTo + 内置转场动画 |
三、实战:美化"待办事项"页面
我们将基于上一篇的 Todo List 示例,进行全方位 UI 升级。
1. 定义全局主题色(推荐做法)
在 resources/base/element/color.json 中添加:
json
{
"color": [
{ "name": "primary_color", "value": "#007DFF" },
{ "name": "surface_color", "value": "#FFFFFF" },
{ "name": "text_primary", "value": "#181818" },
{ "name": "text_secondary", "value": "#666666" },
{ "name": "divider_color", "value": "#E0E0E0" }
]
}
在代码中引用:
ts
// 使用 $r 引用资源
.backgroundColor($r('app.color.surface_color'))
.fontColor($r('app.color.text_primary'))
2. 卡片式布局 + 圆角阴影
将每个待办项包装为"卡片":
ts
ListItem() {
Row() {
// ... Checkbox + Text + Button
}
.width('100%')
.padding(16)
.backgroundColor($r('app.color.surface_color'))
.borderRadius(12) // 圆角
.shadow({ // 阴影
radius: 8,
color: '#00000020', // ARGB 格式,20% 透明度
offsetX: 0,
offsetY: 2
})
.margin({ bottom: 12 }) // 卡片间距
}
💡 阴影参数说明:
radius:模糊半径(越大越柔和)offsetX/Y:偏移方向- 颜色建议使用带透明度的十六进制(如
#AARRGGBB)
3. 按钮美化:统一风格
原始按钮较生硬,我们将其改为"线性+填充"混合风格:
ts
// 添加按钮(主操作)
Button('添加')
.width(80)
.height(40)
.fontSize(16)
.fontColor(Color.White)
.backgroundColor($r('app.color.primary_color'))
.borderRadius(20)
// 删除按钮(危险操作)
Button('删除')
.width(60)
.height(32)
.fontSize(14)
.fontColor('#FF3B30')
.backgroundColor('#FFF0F0') // 浅红背景
.borderRadius(16)
.border({ width: 1, color: '#FF3B30' })
4. 输入框优化
ts
TextInput({ placeholder: '输入新任务' })
.placeholderColor($r('app.color.text_secondary'))
.fontColor($r('app.color.text_primary'))
.backgroundColor('#F5F5F5')
.borderRadius(20)
.padding({ left: 16, right: 16 })
.height(44)
四、响应式布局:适配多设备
鸿蒙提供 断点系统(Breakpoints) 和 媒体查询(Media Query) 实现自适应。
方法 1:使用 windowManager 获取屏幕信息
ts
import window from '@ohos.window';
// 在组件外获取
let windowClass = null;
window.getLastWindow().then(win => {
windowClass = win;
});
// 在 build 中使用
const screenWidth = windowClass ? windowClass.getLayoutRectSync().width : 360;
const isTablet = screenWidth >= 600;
方法 2:条件渲染(推荐)
ts
Column() {
if (isTablet) {
Row() {
// 平板:左右分栏
TaskInput()
TaskList()
}
} else {
// 手机:上下堆叠
TaskInput()
TaskList()
}
}
方法 3:使用 GridRow / GridCol(类似 Bootstrap)
ts
GridRow() {
GridCol({ span: { xs: 12, sm: 6, md: 4 } }) {
// 内容
}
}
📏 断点说明:
xs: < 320vpsm: ≥ 320vpmd: ≥ 520vplg: ≥ 840vp
五、微交互与动效提升体验
1. 按钮点击反馈(缩放动效)
ts
@State scale: number = 1;
Button('添加')
.scale({ x: this.scale, y: this.scale })
.onTouch((event) => {
if (event.type === TouchType.Down) {
animateTo({ duration: 100 }, () => {
this.scale = 0.95;
});
} else if (event.type === TouchType.Up || event.type === TouchType.Cancel) {
animateTo({ duration: 100 }, () => {
this.scale = 1;
});
}
})
2. 列表项添加/删除动效
使用 transition 属性:
ts
ListItem() {
// ...
}
.transition(TransitionAnimation.slide(TransitionEffectType.Insert, SlideEffect.Bottom))
六、UI 一致性检查清单 ✅
在发布前,请确认以下事项:
- 所有颜色来自
color.json资源,而非硬编码 - 文字大小使用标准阶梯(如 14vp、16vp、18vp、24vp)
- 间距遵循 4dp 基数(如 8vp、12vp、16vp、24vp)
- 按钮有明确的点击反馈(颜色变化或动效)
- 在手机、折叠屏、平板模拟器上均显示正常
- 深色模式下可读性良好(可启用系统深色主题测试)
🌙 深色模式适配 :在
resources/dark/element/color.json中定义暗色值即可自动切换!
七、推荐工具与资源
| 工具 | 用途 |
|---|---|
| DevEco Studio 预览器 | 实时查看 UI 效果(支持多设备切换) |
| HarmonyOS Design Kit (Figma) | 官方设计资源库,含组件库与模板 |
| Palette Generator | 生成和谐配色方案(如 Coolors.co) |
| 鸿蒙动效规范文档 | 了解标准交互动效时长与曲线 |
🔗 官方设计资源下载:https://developer.harmonyos.com/cn/design
结语
美观的 UI 不等于"花哨",而是清晰的信息层级 + 一致的视觉语言 + 流畅的交互反馈 。
鸿蒙的 ArkUI 提供了强大的布局与样式能力,配合良好的工程习惯,你完全可以在短时间内打造出媲美原生体验的应用界面。
🎯 记住:用户不会为"技术"买单,但会为"好用又好看"的产品停留。
现在,打开你的 DevEco Studio,给你的应用穿上一件优雅的"新衣"吧!✨