目录
一、探索 ArkUI 的奇妙世界
在鸿蒙开发的广袤天地中,ArkUI 无疑是一颗璀璨的明星,作为鸿蒙系统应用界面的 UI 开发框架,它为开发者打造出了一个充满无限可能的创作空间。从基础组件到容器组件,从多样化的布局方式到强大的动画机制,ArkUI 以其简洁自然的 UI 信息语法、多维的状态管理以及实时界面预览等卓越能力,成为了构建分布式应用的得力助手,极大地提升了开发者的应用开发效率,更为用户带来了生动流畅的使用体验。
在众多让 ArkUI 大放异彩的特性中,自定义组件通用样式是尤为重要的一项。它就像是一位神奇的魔法师,赋予了开发者对组件样式进行统一控制和灵活定制的超能力。在大型应用开发的复杂版图里,复用性和可维护性是决定项目成败的关键因素。自定义组件通用样式能够将常用的 UI 元素或功能逻辑巧妙封装,形成一个个独立且可复用的模块。当我们在不同页面需要展示相同样式的按钮、卡片或者其他组件时,只需引用这个自定义组件,无需重复编写繁琐的代码,不仅大大提高了开发效率,还能确保整个应用的风格一致性。
想象一下,在一个电商应用中,商品列表项的展示在多个页面都有出现,包括商品搜索结果页、分类商品列表页等。通过将商品列表项封装成一个自定义组件,并利用自定义组件通用样式来统一设置背景颜色、文字大小、间距等样式,我们可以在不同页面轻松复用这个组件。并且当需要调整商品列表项的样式或交互逻辑时,只需要在自定义组件中进行一次修改,所有引用该组件的页面都会自动更新,有效降低了维护成本,让开发工作变得更加高效和轻松。
二、build () 函数:自定义组件的基石
在自定义组件的构建过程中,build () 函数占据着无可替代的核心地位,堪称自定义组件的基石。它就像是一位精心的设计师,负责定义组件的声明式 UI 描述,详细勾勒出组件的 UI 布局和内容。可以说,每个自定义组件都必须实现 build () 函数,它是组件展示在用户面前的关键步骤。
从功能上看,build () 函数就像是一个 “魔法工厂”,当组件被创建或者组件内状态变量发生更新时,它就会被系统自动调用,根据其中定义的 UI 描述重新构建组件的界面,实现 UI 的实时刷新,让用户能够看到最新的界面状态 。比如在一个新闻应用中,新闻列表项组件里的点赞数、评论数等状态变量发生变化时,build () 函数会及时响应,更新 UI 上显示的点赞数和评论数,让用户第一时间获取到最新的数据。
下面通过一个简单的代码示例来直观感受 build () 函数的基础用法:
@Component
struct MyButton {
@State text: string = "点击我";
build() {
Button(this.text)
.width(120)
.height(40)
.backgroundColor(Color.Blue)
.fontColor(Color.White)
.onClick(() => {
this.text = "已点击";
});
}
}
@Entry
@Component
struct Main {
build() {
Column() {
MyButton();
}.width('100%').height('100%');
}
}
在这个例子中,我们定义了一个自定义组件 MyButton。在 MyButton 组件中,首先使用 @State 装饰器声明了一个状态变量 text,初始值为 “点击我”。然后在 build () 函数中,创建了一个 Button 组件,并通过链式调用设置了它的宽度、高度、背景颜色、字体颜色等样式属性,还为其添加了点击事件处理函数。当按钮被点击时,状态变量 text 的值会被更新为 “已点击”,由于状态变量的变化,build () 函数会被自动调用,重新构建 Button 组件的 UI,将按钮上的文本更新为 “已点击” 。而在 Main 组件中,我们通过 Column 容器组件引用了 MyButton 组件,将其展示在页面上。通过这个简单的示例,我们可以清晰地看到 build () 函数是如何定义自定义组件的 UI 结构,以及如何通过状态变量的变化驱动 UI 更新的 。
三、通用样式的定义与实现
(一)@Styles 装饰器的运用
在 ArkUI 中,@Styles 装饰器是实现自定义组件通用样式的得力助手。它的主要功能是将多条样式设置提炼成一个方法,这样在组件声明的位置可以直接调用,大大提高了样式设置的效率和代码的简洁性 。
@Styles 装饰器的使用方式较为灵活,既可以在组件内定义,也能在全局定义。当在全局定义时,需要在方法名前面添加 function 关键字,例如:
// 全局定义
@Styles function globalCommonStyle() {
.width(100)
.height(50)
.backgroundColor(Color.Gray)
}
而在组件内定义时,则不需要添加 function 关键字,如下所示:
@Component
struct MyComponent {
@State bgColor: ResourceColor = Color.Yellow;
@Styles commonStyle() {
.width(120)
.height(60)
.backgroundColor(this.bgColor)
}
build() {
Column() {
Button('按钮').commonStyle();
}
}
</