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. Codeforces Round 973 (Div. 2) D

    性质1:题目操作相当于将前面的数搬到了后面,将其视为柱状图,则是把前面柱的高度转移至后面柱的高度 性质2:最后移成的序列以单调不下降序列为最优,易证明当存在下降时,可通过操作使答案更优或不变差 性质3 ...

  2. [OI] Kruskal 重构树

    算法介绍 Kruskal 重构树用于快速判断节点的连通性. 考虑到,假如两个节点是联通的,则他们之间总会有一条边被选入最小生成树内,因此他们在最小生成树内也是联通的. 也就是说,我们可以通过求最小生成 ...

  3. Docker基本概念(LXC?镜像、容器、仓库是什么?容器和虚拟机又是什么?)(一)

    学习Docker前,我们有必要了解下Docker的前生LXC(Linux Container). 一.LXC介绍 LXC 可以提供轻量级的虚拟化,用来隔离进程和资源,和我们传统观念中的全虚拟化完全不一 ...

  4. foobar2000 v2.1.3 汉化版(更新日期:2024.04.02)

    foobar2000 v2.1.3 汉化版 -----------------------[软件截图]---------------------- -----------------------[软件 ...

  5. 搜广推算法校招面试:BOSS直聘 推荐搜索系统工程师

      本文介绍2024届秋招中,BOSS直聘的推荐/搜索系统工程师岗位一面的面试基本情况.提问问题等.   2023年12月,赶在秋招的末尾,投递了BOSS直聘的推荐/搜索系统工程师岗位,并不清楚所在的 ...

  6. 轨道控制器 threejs

    就是一个可以360转动的相机,通过不断的改变相机的参数 然后渲染达到效果. // 引入相机控件  -- 轨道控制器 // console.log('OrbitControls',OrbitContro ...

  7. 通过maven动态配置spring boot配置文件

    一.引入maven插件的jar包 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifact ...

  8. 用 KubeKey 快速离线部署 K8s 与 KubeSphere

    作者:尹珉,KubeSphere Ambassador,KubeSphere 社区用户委员会杭州站站长 一.KubeKey 介绍 KubeKey(以下简称 KK) 是一个用于部署 Kubernetes ...

  9. 史上最全 Terraform 入门教程,助你无坑入门!

    在云计算的浪潮中,基础设施管理变得越来越复杂.如何高效地配置和管理云资源,成为了每个开发者和运维工程师必须面对的挑战.Terraform,作为一种强大的基础设施即代码(IaC)工具,为我们提供了一种简 ...

  10. 在嵌入式设备中实现webrtc的第三种方式②

    先贴上效果图以及操作路径. 操作路径为:启动信令服务器,配置浏览器关闭mDNS,双端登录,浏览器端邀请.最终连接成功建立,我们通过datachannel成功通信 (关闭mDNS是因为谷歌浏览器隐藏了局 ...