1、前言

接下里我们将开启“鸿蒙UI布局系列”的学习,第一站:学习线性布局(Row/Column)+ 弹性布局(Flex)

在展开学习前,先上一个实战demo——开发一个个人中心页面,示意图如下:

其中需要关注的重点知识有:

  1. 如何实现图标按钮左对齐;

  2. 如何实现一个渐变色的圆形头像站位图;

  3. “关于我们”选项中,左侧图标与文字贴合,右侧图标如何保持右对齐;

  4. 底部的“注销登录”按钮如何保持底部对齐。

  5. 如何实现循环渲染控制处理重复的选项;

  6. 如何实现自定义的按压效果(按压“联系客服”效果演示如下);

2、实现

下面是实现布局的核心代码,看不懂没关系,未来我们将逐步学习。

请持续关注“鸿蒙UI布局开发系列。”

interface SettingItem {
img: Resource,
text: Resource,
} @Entry
@Component
export default struct UserCenter {
@State settingItems: Array<SettingItem> = [{
img: $r('app.media.about_us'),
text: $r('app.string.page_user_center_about_us')
}, {
img: $r('app.media.share_app'),
text: $r('app.string.page_user_center_share_app')
}, {
img: $r('app.media.head_set'),
text: $r('app.string.page_user_center_contact')
}, {
img: $r('app.media.update'),
text: $r('app.string.page_user_center_update')
}
] @Builder buildTopBar() {
Flex({ direction: FlexDirection.RowReverse, alignContent: FlexAlign.Center }) {
this.buildSettingBtn()
}
.width('100%')
.height(60)
} @Builder buildSettingBtn() {
Image($r('app.media.settings'))
.width(40)
.height(40)
.margin({
right: 10,
left: 10
})
.padding(5)
.borderRadius(10)
.stateStyles({
pressed: {
.backgroundColor($r('app.color.common_pressed_color'))
},
normal: {
.backgroundColor(Color.Transparent)
}
})
} @Builder buildUserAvatar() {
Column() {
Image('')
.borderRadius(50)
.width(100)
.height(100)
.alignSelf(ItemAlign.Center)
.linearGradient({
angle: '143deg',
direction: GradientDirection.Bottom,
colors: [['rgba(146, 224, 255, 0.7)', 0.15], ['#90E2FF', 0.18], ['rgba(246, 144, 255, 0.7)', 0.85]]
}) Text('Harmony自习室')
.alignSelf(ItemAlign.Center)
.margin({ top: 21 })
.fontWeight('bold')
.fontSize(24)
}.width('100%')
} @Builder buildLogout() {
Flex() {
Button($r('app.string.page_user_center_logout'))
.borderRadius(24)
.width('100%')
.backgroundColor('#F9E8EE')
.fontColor('#E47792')
}.width('100%')
.padding({
left: 52,
right: 52,
bottom: 20,
})
} @Builder buildContentList() {
Column() {
ForEach(this.settingItems, (item: SettingItem) => {
Row() {
Image(item.img)
.width($r('app.float.setting_list_icon_size'))
.height($r('app.float.setting_list_icon_size'))
.margin({ right: 15 })
Text(item.text)
.fontSize($r('app.float.setting_list_icon_size'))
.lineHeight($r('app.float.setting_list_icon_size'))
.fontColor('#3D3D3D')
.fontWeight(500)
Blank()
Image($r('app.media.right'))
.width($r('app.float.setting_list_icon_size'))
.height($r('app.float.setting_list_icon_size'))
.alignSelf(ItemAlign.End)
}.width('100%')
.padding({ top: 15, bottom: 15, left: 10, right: 10 })
.margin({top: 10})
.stateStyles({
pressed: { .borderRadius(20).backgroundColor($r('app.color.common_pressed_color'))
},
normal: { .backgroundColor(Color.Transparent)
}
})
})
}
.flexGrow(1)
.width('100%')
.padding(10)
} build() {
Flex({ direction: FlexDirection.Column }) {
this.buildTopBar();
this.buildUserAvatar();
this.buildContentList();
this.buildLogout();
}
.padding({
top: $r('app.float.default_toolbar_top_padding')
})
.height('100%')
}
}

鸿蒙UI布局实战 —— 个人中心页面开发的更多相关文章

  1. gin框架博客实战教程2019web页面开发go语言实战博客开发

    视频教程: https://www.bilibili.com/video/av73698322?t=2400&p=5 资料下载地址(含数据库和main.go和controller里的代码) 注 ...

  2. Flutter实战视频-移动电商-64.会员中心_顶部头像UI布局

    64.会员中心_顶部头像UI布局 会员中心的样式 member.dart 清除原来的代码生成一个基本的结构 默认返回一个scaffold脚手架工具,body里面布局使用ListView,这样不会出现纵 ...

  3. Flutter实战视频-移动电商-65.会员中心_订单区域UI布局

    65.会员中心_订单区域UI布局 我的订单区域 member.dart写我的标题的方法 布局使用瓦片布局 先做修饰,decoration颜色的背景,下边线的样式 //我的订单标题 Widget _or ...

  4. X5的UI部分和传统Web页面开发的差异

    http://doc.wex5.com/different-with-std-web-ui/#1 X5的UI部分和传统Web页面开发的差异 WeX5是跨端移动开发框架,BeX5是基于WeX5的企业快速 ...

  5. iOS开发~UI布局(三)深入理解autolayout

    一.概要 通过对iOS8界面布局的学习和总结,发现autolayout才是主角,autolayout是iOS6引入的新特性,当时还粗浅的学习了下,可是没有真正应用到项目中.随着iOS设备尺寸逐渐碎片化 ...

  6. iOS开发~UI布局(二)storyboard中autolayout和size class的使用详解

    一.概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是我们一定会遇到的: 1.Xcode6中增加了size class,在storyboard中如何使用? 2.a ...

  7. iOS开发~UI布局(一)初探Size Class

    随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是Size Class.Size Class配合Auto Layout可以解决 ...

  8. iOS8开发~UI布局(二)storyboard中autolayout和size class的使用具体解释

    一.概要:前一篇初步的描写叙述了size class的概念,那么实际中怎样使用呢,以下两个问题是我们一定会遇到的: 1.Xcode6中添加了size class,在storyboard中怎样使用? 2 ...

  9. 移动端页面开发适配 rem布局原理

    主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...

  10. mxonline实战14,全局搜索,修改个人中心页面个人资料信息

    对应github地址:第14天   一. 全局搜索   1. 使用关键词搜索 courses/views.py/CourseListView新增代码,不用把search_keywords传到前端

随机推荐

  1. duxapp:基于Taro使用模块化开发,提升开发效率

    duxapp是基于Taro二次开发的模块化框架 使用这个框架,结合框架提供的UI库和工具库,能帮助你快速且高质量的完成项目,且能实现同时开发小程序.H5.APP(React Native),并且保证各 ...

  2. Foxmail 设置个人签名的方法

    事件起因: 在foxmail设置一个好看的个人签名 具体设置过程: 打开Foxmail - 右上角设置 -写邮件 签名的设置 字体格式:等线 10px 黑色 内容: 名字 | 名字英文 职位 个人邮箱 ...

  3. c++可变模板参数

    在C++中的可变模板参数使用省略号 ... 来表示一个参数包(Parameter Pack),其具体位置决定了这个包是模板参数包还是函数参数包,以及如何进行参数展开. 1. 模板参数包:c... Ar ...

  4. string的find()与npos

    在 C++ 中,std::string::find() 是一个用于在字符串中查找子字符串或字符的成员函数.查找成功时返回匹配的索引位置,查找失败时返回 std::string::npos,表示未找到. ...

  5. mysql+navicat+eclipse+jsp

    mysql server 5.5安装 微信公众号搜软件智库,然后找到mysql 5.5 百度网盘下载对应自己电脑版本的mysql 百度网盘:http://pan.baidu.com/s/1jI5oB6 ...

  6. .NET云原生应用实践(四):基于Keycloak的认证与授权

    本章目标 完成Keycloak的本地部署与配置 在Stickers RESTful API层面完成与Keycloak的集成 在Stickers RESTful API上实现认证与授权 Keycloak ...

  7. optical simulation of quantum logic

    量子逻辑的光学模拟(PRA, 1998)  主机中<1998Cerf.pdf> 核心: 1. 用一个光子的多条路径的叠加态来表示n qubits, 那么实验上干涉仪所包含的路径数为 2^n ...

  8. chapter4 quantum circuits

    本章内容为 P172--P215: 主机 word 文件为: chapter4.docx 详情见文件 chapter4.1_singlequbit.cdf  或主机同名文件 4.7 Simulatio ...

  9. win10本地客户端配置SSL并使用MQTTX

    1.     本地下载Openssl(默认安装即可,最后一个将打赏取消勾选) Win32/Win64 OpenSSL Installer for Windows - Shining Light Pro ...

  10. 解密prompt系列42. LLM通往动态复杂思维链之路

    最近大家都在探讨和尝试复现OpenAI O1的思考效果,解码出的关键技术方向,包括之前已经探讨过的Inference Time Scaling在推理过程中进行路径决策和选择.但想要更优的Inferen ...