鸿蒙UI布局实战 —— 个人中心页面开发
1、前言
接下里我们将开启“鸿蒙UI布局系列”的学习,第一站:学习线性布局(Row/Column)+ 弹性布局(Flex)
在展开学习前,先上一个实战demo——开发一个个人中心页面,示意图如下:
其中需要关注的重点知识有:
如何实现图标按钮左对齐;
如何实现一个渐变色的圆形头像站位图;
“关于我们”选项中,左侧图标与文字贴合,右侧图标如何保持右对齐;
底部的“注销登录”按钮如何保持底部对齐。
如何实现循环渲染控制处理重复的选项;
如何实现自定义的按压效果(按压“联系客服”效果演示如下);
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布局实战 —— 个人中心页面开发的更多相关文章
- gin框架博客实战教程2019web页面开发go语言实战博客开发
视频教程: https://www.bilibili.com/video/av73698322?t=2400&p=5 资料下载地址(含数据库和main.go和controller里的代码) 注 ...
- Flutter实战视频-移动电商-64.会员中心_顶部头像UI布局
64.会员中心_顶部头像UI布局 会员中心的样式 member.dart 清除原来的代码生成一个基本的结构 默认返回一个scaffold脚手架工具,body里面布局使用ListView,这样不会出现纵 ...
- Flutter实战视频-移动电商-65.会员中心_订单区域UI布局
65.会员中心_订单区域UI布局 我的订单区域 member.dart写我的标题的方法 布局使用瓦片布局 先做修饰,decoration颜色的背景,下边线的样式 //我的订单标题 Widget _or ...
- X5的UI部分和传统Web页面开发的差异
http://doc.wex5.com/different-with-std-web-ui/#1 X5的UI部分和传统Web页面开发的差异 WeX5是跨端移动开发框架,BeX5是基于WeX5的企业快速 ...
- iOS开发~UI布局(三)深入理解autolayout
一.概要 通过对iOS8界面布局的学习和总结,发现autolayout才是主角,autolayout是iOS6引入的新特性,当时还粗浅的学习了下,可是没有真正应用到项目中.随着iOS设备尺寸逐渐碎片化 ...
- iOS开发~UI布局(二)storyboard中autolayout和size class的使用详解
一.概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是我们一定会遇到的: 1.Xcode6中增加了size class,在storyboard中如何使用? 2.a ...
- iOS开发~UI布局(一)初探Size Class
随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是Size Class.Size Class配合Auto Layout可以解决 ...
- iOS8开发~UI布局(二)storyboard中autolayout和size class的使用具体解释
一.概要:前一篇初步的描写叙述了size class的概念,那么实际中怎样使用呢,以下两个问题是我们一定会遇到的: 1.Xcode6中添加了size class,在storyboard中怎样使用? 2 ...
- 移动端页面开发适配 rem布局原理
主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...
- mxonline实战14,全局搜索,修改个人中心页面个人资料信息
对应github地址:第14天 一. 全局搜索 1. 使用关键词搜索 courses/views.py/CourseListView新增代码,不用把search_keywords传到前端
随机推荐
- el-table
el-table-column 渲染的顺序不对,第一列被渲染到最后 el-table-column 必须作为 el-table 或 el-table-column 的直接子元素使用,如果不是将会导致标 ...
- Java!!冲
开始学习Java!!!
- 1Before You Install Flask...Watch This! Flask Fridays #1
flask官网: https://flask.github.net.cn/ git官网: https://git-scm.com/ 建立文件: 建立虚拟环境.激活: source virt/Scrip ...
- 关于Android Q平台上qssi的介绍
QSSI 是 Qualcomm Single System Image 的缩写. Android Q上开始支持QSSI. QSSI 是用来编译system.img的3.1 QSSI编译注意事项 lun ...
- gaussian噪声
高斯噪声 高斯噪声(Gaussian noise)是一种具有正态分布(也称作高斯分布)概率密度函数的噪声.换句话说,高斯噪声的值遵循高斯分布或者它在各个频率分量上的能量具有高斯分布.它被极其普遍地应用 ...
- 最受DBA欢迎的数据库技术文档-巡检篇
有人说,"数据库巡检是数据库运维领域最重要的工作".的确,为了保证数据库的稳定.安全运行,除了可以对数据库进行监控以及时知晓故障苗头,定期的"健康体检"则尤为重 ...
- 000 通过 Pytorch 实现 Transformer 框架完整代码(带注释)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- css常用布局之flex布局
Flexbox 是一个一维的布局模式,它可以轻松地在不同的方向上排列子元素(称为 flex 项),即使它们的大小是未知或者是动态变化的.以下是 Flexbox 的一些关键概念: 容器和项: 启用 Fl ...
- C++中的各种锁
在多线程开发中,经常会遇到数据同步,很多情况下用锁都是一个很好的选择.C++中常用的锁主要有下面几种: 互斥锁(std::mutex) 这是最基本的一种锁.它用于保护共享资源,在任意时刻,最多只有一个 ...
- games101_Homework5
使用光线追踪来渲染图像,实现两个部分:光线的生成和光线与三角的求交 你需要修改的函数是: • Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光 线,然后调用函数 ...