17.[HarmonyOS NEXT Column案例一(下)] 表单组件的详细实现与样式定制

简介: 在上一篇教程中,我们介绍了Column组件的基本概念和参数设置。本篇将深入探讨登录表单中各个子组件的实现细节,包括Text、TextInput和Button组件的属性设置和样式定制,以及如何将这些组件组合成一个完整的登录表单界面。


项目已开源,开源地址: https://gitcode.com/nutpi/HarmonyosNextCaseStudyTutorial , 欢迎fork & star

案例演示


1. 引言

在上一篇教程中,我们介绍了Column组件的基本概念和参数设置。本篇将深入探讨登录表单中各个子组件的实现细节,包括Text、TextInput和Button组件的属性设置和样式定制,以及如何将这些组件组合成一个完整的登录表单界面。

2. 表单子组件详解

在我们的登录表单中,主要包含三类子组件:Text(文本)、TextInput(输入框)和Button(按钮)。下面我们将逐一分析这些组件的实现。

2.1 Text组件:标题实现

标题使用Text组件实现,代码如下:

// 标题
Text('用户登录')
    .fontSize(24)
    .fontWeight(500)
    .alignSelf(ItemAlign.Start) // 左对齐

2.1.1 Text组件属性详解

属性

作用

fontSize

24

设置字体大小为24vp

fontWeight

500

设置字体粗细,500表示中等偏粗

alignSelf

ItemAlign.Start

设置组件在交叉轴(水平方向)上的对齐方式为起始位置(左对齐)

2.1.2 alignSelf属性的重要性

alignSelf属性允许单个子组件覆盖Column容器的默认对齐方式。在本例中,虽然Column没有显式设置alignItems属性(默认为居中),但标题文本通过alignSelf(ItemAlign.Start)实现了左对齐,这是表单设计中常见的布局方式。

ItemAlign枚举值包括:

  • Start:起始位置对齐(左对齐)
  • Center:居中对齐
  • End:结束位置对齐(右对齐)
  • Stretch:拉伸填充

2.2 TextInput组件:输入框实现

登录表单包含两个输入框:用户名输入框和密码输入框。它们使用TextInput组件实现,具有相似的样式但功能略有不同。

2.2.1 用户名输入框

// 用户名输入框
TextInput({ text: this.username, placeholder: '请输入用户名' })
    .fontSize(16)
    .padding(12)
    .border({ width: 1, color: 0xD9D9D9 })
    .borderRadius(8)

2.2.2 密码输入框

// 密码输入框
TextInput({ text: this.username, placeholder: '请输入密码' })
    .fontSize(16)
    .padding(12)
    .type(InputType.Password)
    .border({ width: 1, color: 0xD9D9D9 })
    .borderRadius(8)

2.2.3 TextInput组件属性详解

属性

作用

text

this.username

绑定输入框的文本值到组件的状态变量

placeholder

'请输入用户名'/'请输入密码'

设置输入框的提示文本

fontSize

16

设置字体大小为16vp

padding

12

设置内边距为12vp,使文本与边框保持适当距离

type

InputType.Password(仅密码框)

设置输入类型为密码,显示为掩码字符

border

{ width: 1, color: 0xD9D9D9 }

设置边框宽度为1vp,颜色为浅灰色

borderRadius

8

设置边框圆角为8vp,使输入框更美观

2.2.4 注意事项

在代码中,密码输入框绑定了this.username而非this.password,这可能是一个错误。正确的实现应该是:

// 密码输入框
TextInput({ text: this.password, placeholder: '请输入密码' })

这样才能正确地将密码输入框的值绑定到password状态变量。

2.3 Button组件:登录按钮实现

登录按钮使用Button组件实现,代码如下:

// 登录按钮
Button('立即登录')
    .width('100%')
    .height(48)
    .backgroundColor(0x007DFF)
    .fontColor(0xFFFFFFFF)
    .fontSize(16)
    .borderRadius(8)

2.3.1 Button组件属性详解

属性

作用

width

'100%'

设置按钮宽度占父容器的100%

height

48

设置按钮高度为48vp

backgroundColor

0x007DFF

设置背景色为蓝色

fontColor

0xFFFFFFFF

设置字体颜色为白色

fontSize

16

设置字体大小为16vp

borderRadius

8

设置边框圆角为8vp,使按钮更美观

3. 状态管理与数据绑定

在表单组件中,状态管理和数据绑定是重要的概念。我们的FormExample组件使用@State装饰器定义了两个状态变量:

@State username: string = ''
@State password: string = ''

3.1 @State装饰器的作用

@State装饰器用于定义组件的内部状态。当状态变量的值发生变化时,框架会自动重新渲染组件,更新UI。

3.2 数据绑定机制

在TextInput组件中,我们通过text参数将输入框的值与状态变量绑定:

TextInput({ text: this.username, placeholder: '请输入用户名' })

这种双向绑定机制确保:

  • 当用户在输入框中输入文本时,状态变量的值会自动更新
  • 当状态变量的值通过其他方式更新时,输入框的显示也会相应更新

4. 样式一致性与设计规范

在表单设计中,保持样式一致性是提升用户体验的关键。我们的登录表单遵循了以下设计规范:

4.1 间距规范

元素

间距

子组件之间

20vp(通过Column的space参数设置)

表单与屏幕顶部

40vp(通过padding.top设置)

表单与屏幕左右边缘

24vp(通过padding.left和padding.right设置)

输入框内文本与边框

12vp(通过TextInput的padding设置)

4.2 字体规范

元素

字体大小

字体粗细

标题

24vp

500(中等偏粗)

输入框

16vp

默认

按钮

16vp

默认

4.3 颜色规范

元素

颜色

十六进制值

背景

白色

0xFFFFFF

输入框边框

浅灰色

0xD9D9D9

按钮背景

蓝色

0x007DFF

按钮文字

白色

0xFFFFFFFF

4.4 圆角规范

输入框和按钮统一使用8vp的圆角,保持视觉一致性。

5. 完整代码分析

让我们回顾完整的FormExample组件代码:

@Component
export struct FormExample {
    @State username: string = ''
    @State password: string = ''
    build() {
        Column({ space: 20 }) // 子组件垂直间距20vp
        {
            // 标题
            Text('用户登录')
                .fontSize(24)
                .fontWeight(500)
                .alignSelf(ItemAlign.Start) // 左对齐
            // 用户名输入框
            TextInput({ text: this.username, placeholder: '请输入用户名' })
                .fontSize(16)
                .padding(12)
                .border({ width: 1, color: 0xD9D9D9 })
                .borderRadius(8)
            // 密码输入框
            TextInput({ text: this.username, placeholder: '请输入密码' })
                .fontSize(16)
                .padding(12)
                .type(InputType.Password)
                .border({ width: 1, color: 0xD9D9D9 })
                .borderRadius(8)
            // 登录按钮
            Button('立即登录')
                .width('100%')
                .height(48)
                .backgroundColor(0x007DFF)
                .fontColor(0xFFFFFFFF)
                .fontSize(16)
                .borderRadius(8)
        }
        .justifyContent(FlexAlign.Center)
        .width('100%')
        .padding({ top: 40, left: 24, right: 24 })
        .backgroundColor(0xFFFFFF)
        .height('100%') // 撑满屏幕高度
    }
}

5.1 代码结构分析

  1. 组件定义:使用@Component装饰器定义FormExample自定义组件
  2. 状态定义:使用@State装饰器定义username和password状态变量
  3. 布局容器:使用Column组件创建垂直布局
  4. 子组件排列:按照标题、用户名输入框、密码输入框、登录按钮的顺序排列
  5. 样式设置:为每个组件设置适当的样式属性
  6. 容器样式:为Column容器设置对齐方式、尺寸、内边距和背景色

5.2 链式调用的优势

HarmonyOS NEXT的ArkUI框架采用链式调用的方式设置组件属性,这种方式有以下优势:

  1. 代码简洁:避免了重复的组件引用
  2. 可读性强:属性设置清晰可见
  3. 灵活性高:可以方便地添加或移除属性

6. 总结

通过本教程的两个部分,我们详细讲解了如何使用Column组件创建垂直排列的表单布局,包括:

  1. Column组件的基本概念和参数设置
  2. 表单子组件(Text、TextInput、Button)的实现细节
  3. 状态管理与数据绑定机制
  4. 样式一致性与设计规范
相关文章
|
2月前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
269 0
|
1月前
|
移动开发 网络协议 小程序
鸿蒙NEXT即时通讯/IM系统RinbowTalk v2.4版发布,基于MobileIMSDK框架、ArkTS编写
RainbowTalk是一套基于开源即时通讯讯IM框架 MobileIMSDK 的产品级鸿蒙NEXT端IM系统。纯ArkTS编写、全新开发,没有套壳、也没走捷径,每一行代码都够“纯血”。与姊妹产品RainbowChat和RainbowChat-Web 技术同源,历经考验。
66 1
|
2月前
|
缓存 移动开发 网络协议
纯血鸿蒙NEXT即时通讯/IM系统:RinbowTalk正式发布,全源码、纯ArkTS编写
RainbowTalk是一套基于MobileIMSDK的产品级鸿蒙NEXT端IM系统,目前已正式发布。纯ArkTS、从零编写,无套壳、没走捷径,每一行代码都够“纯”(详见:《RainbowTalk详细介绍》)。 MobileIMSDK是一整套开源IM即时通讯框架,历经10年,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp、鸿蒙NEXT,服务端基于Netty编写。
174 1
HarmonyOS实战—组件的外边距和内边距
HarmonyOS实战—组件的外边距和内边距
476 1
HarmonyOS实战—组件的外边距和内边距
|
3月前
|
开发者
鸿蒙开发:资讯项目实战之项目初始化搭建
目前来说,我们的资讯项目只是往前迈了很小的一步,仅仅实现了项目创建,步虽小,但概念性的知识很多,这也是这个项目的初衷,让大家不仅仅可以掌握日常的技术开发,也能让大家理解实际的项目开发知识。
鸿蒙开发:资讯项目实战之项目初始化搭建
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
缓存 JavaScript IDE
鸿蒙开发:基于最新API,如何实现组件化运行
手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!
118 0
鸿蒙开发:基于最新API,如何实现组件化运行
|
3月前
|
SQL 弹性计算 数据库
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化指南来了!从UI渲染到数据库操作,6大实战案例助你提升应用流畅度。布局层级优化、数据加载并发、数据库查询提速、相机资源延迟释放、手势识别灵敏调整及转场动画精调,全面覆盖性能痛点。附赠性能自检清单,帮助开发者高效定位问题,让应用运行如飞!来自华为官方文档的精华内容,建议收藏并反复研读,共同探讨更多优化技巧。
|
3月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
126 0
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。