鸿蒙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传到前端
随机推荐
- 全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
全网最适合入门的面向对象编程教程:50 Python 函数方法与接口-接口和抽象基类 摘要: 在 Python 中,接口和抽象基类(Abstract Base Classes, ABCs)都用于定义类 ...
- Maven高级——私服(Nexus)
私服 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题 Nexus Sonatype公司的一款maven私服产品 下载地址(需要魔法):nexus-3.49.0-02-win64.zi ...
- 关于BarchNorm的一些学习
<Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift> ...
- 数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年1月刊
墨天轮数据社区是一个专业的数据技术内容分享社区,汇集了来自各行业的专家大咖.一线技术人员,他们勤于记录.乐于分享,发布了众多国内外数据库技术相关的优质实操文章.文档.在这里,我们将为大家整理墨天轮网站 ...
- 如何让img图片居中
说明:img是行内块元素,用一个盒子(父元素)嵌套img(子元素) text-align:center;可以让父元素为块元素的行内块或行内元素水平居中: vaertical-align:middle; ...
- 015 Python 的输入输出和字符串格式化(终于可以和计算机交流了)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/26 20:11 # Filename:015 Python 的输入输出和 ...
- KubeSphere 社区双周报| 2024.08.30-09.12
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 云原生周刊:Kubernetes v1.31 中的移除和主要变更|2024.7.22
开源项目 Argo Rollouts Argo Rollouts 是一个 Kubernetes 控制器和一组自定义资源定义(CRDs),提供高级部署功能,例如蓝绿部署.金丝雀部署.金丝雀分析.实验以及 ...
- Kubernetes 集群中流量暴露的几种方案
作者:KaliArch(薛磊),某 Cloud MSP 服务商产品负责人,熟悉企业级高可用 / 高并发架构,包括混合云架构.异地灾备,熟练企业 DevOps 改造优化,熟悉 Shell/Python/ ...
- LaMI-DETR:基于GPT丰富优化的开放词汇目标检测 | ECCV'24
现有的方法通过利用视觉-语言模型(VLMs)(如CLIP)强大的开放词汇识别能力来增强开放词汇目标检测,然而出现了两个主要挑战:(1)概念表示不足,CLIP文本空间中的类别名称缺乏文本和视觉知识.(2 ...