网站首页 > 技术文章 正文
效果展示
这篇文章,我们实现上面这个登录页面。所有代码,均为本人手敲
整体页面布局
页面整体布局为Column,主轴从上到下,中间对齐。交叉轴为中间对齐。左右两边各10fp,代码:
build() {
Column() {}
.padding({ left: 10, right: 10 }).height('100%').backgroundColor(Color.White).justifyContent(FlexAlign.Center)
}
接下来,我们往里面逐行的添加内容。
这块是一个图片LOGO,两行文字,具体:
Image($r('app.media.icon')).width(100).height(100).margin({ bottom: 20 })
Text('登录界面')
.fontSize($r('app.float.title_30'))
.fontColor(Color.Black)
.fontWeight(FontWeight.Bold)
.margin({ bottom: 20 })
Text('登录后可以享受更多服务')
.fontSize($r('app.float.title_20'))
.fontColor(Color.Gray)
.fontWeight(FontWeight.Medium)
.margin({ bottom: 20 })
手机号、密码输入区
这块是两个TextInput组件,两个在一行的Text组件,具体:
TextInput({ placeholder: '输入手机号' })
.type(InputType.Number)
.height(50)
.margin({ bottom: 10 })
.borderRadius(10)
TextInput({ placeholder: '输入密码' })
.type(InputType.Password)
.height(50)
.margin({ bottom: 10 })
.borderRadius(10)
Row() {
Text('短信验证码登录').fontSize($r('app.float.title_15')).fontColor(Color.Blue)
Text('忘记密码').fontSize($r('app.float.title_15')).fontColor(Color.Blue)
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.margin({ bottom: 60 })
登录区
最后是登录区,具体:
Button('登录').type(ButtonType.Normal).width('100%')
.borderRadius(10).margin({ bottom: 20 })
Text('注册账号').fontSize($r('app.float.title_15')).fontColor(Color.Blue)
.margin({ bottom: 50 })
Text('其他方式登录').fontSize($r('app.float.title_12')).fontColor(Color.Gray)
.margin({ bottom: 20 })
Row() {
this.getOtherLoginText('方式一')
this.getOtherLoginText('方式二')
this.getOtherLoginText('方式三')
}.width('100%').justifyContent(FlexAlign.SpaceAround)
其中,getOtherLoginText函数是一个builder装饰的自定义构建函数,具体:
@Builder getOtherLoginText(title: string) {
Text(title)
.fontColor(Color.Gray)
.width(50)
.height(50)
.borderWidth(1)
.borderRadius(25)
.borderColor(Color.Gray)
.backgroundColor(Color.White)
.textAlign(TextAlign.Center)
.fontSize($r('app.float.title_12'))
}
整体代码
@Entry
@Component
struct Login {
@Builder getOtherLoginText(title: string) {
Text(title)
.fontColor(Color.Gray)
.width(50)
.height(50)
.borderWidth(1)
.borderRadius(25)
.borderColor(Color.Gray)
.backgroundColor(Color.White)
.textAlign(TextAlign.Center)
.fontSize($r('app.float.title_12'))
}
build() {
Column() {
Image($r('app.media.icon')).width(100).height(100).margin({ bottom: 20 })
Text('登录界面')
.fontSize($r('app.float.title_30'))
.fontColor(Color.Black)
.fontWeight(FontWeight.Bold)
.margin({ bottom: 20 })
Text('登录后可以享受更多服务')
.fontSize($r('app.float.title_20'))
.fontColor(Color.Gray)
.fontWeight(FontWeight.Medium)
.margin({ bottom: 20 })
TextInput({ placeholder: '输入手机号' })
.type(InputType.Number)
.height(50)
.margin({ bottom: 10 })
.borderRadius(10)
TextInput({ placeholder: '输入密码' })
.type(InputType.Password)
.height(50)
.margin({ bottom: 10 })
.borderRadius(10)
Row() {
Text('短信验证码登录').fontSize($r('app.float.title_15')).fontColor(Color.Blue)
Text('忘记密码').fontSize($r('app.float.title_15')).fontColor(Color.Blue)
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.margin({ bottom: 60 })
Button('登录').type(ButtonType.Normal).width('100%').borderRadius(10).margin({ bottom: 20 })
Text('注册账号').fontSize($r('app.float.title_15')).fontColor(Color.Blue).margin({ bottom: 50 })
Text('其他方式登录').fontSize($r('app.float.title_12')).fontColor(Color.Gray).margin({ bottom: 20 })
Row() {
this.getOtherLoginText('方式一')
this.getOtherLoginText('方式二')
this.getOtherLoginText('方式三')
}.width('100%').justifyContent(FlexAlign.SpaceAround)
}
.padding({ left: 10, right: 10 }).height('100%').backgroundColor(Color.White).justifyContent(FlexAlign.Center)
}
}
以上就是这个登录页面的全部代码了,是不是很简单?对比Android开发来说,简单了不少吧?
原创不易,鉴于本人水平有限,文中如有错误之处欢迎大家指正。欢迎大家点个关注,我将继续为大家分享相关的技术内容。
猜你喜欢
- 2024-11-17 fastapi+vue3文件上传(vue ftp上传)
- 2024-11-17 从零开始构建PDF阅读器(最简单的pdf阅读器)
- 2024-11-17 Dooring可视化之从零实现动态表单设计器
- 2024-11-17 在 FastAPI 中处理表单和用户输入:综合指南
- 2024-11-17 Laravel9表单的验证(validate表单验证)
- 2024-11-17 第63节 Form表单-Web前端开发之JavaScript-王唯
- 2024-11-17 Gateway结合Sentinel1.8限流熔断及自定义异常
- 2024-11-17 手机网站常见问题总结(手机网站出现错误怎么办)
- 2024-11-17 CSS实现去除Input框默认样式的详细教程
- 2024-11-17 企业必备实战之Sentinel规则Nacos持久化
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-