鸿蒙开发实战终极案例--高仿微信App(附源码),阿里独家面试手册

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

这里我把项目初始化文件index.ets作为Tabs根控制器,再创建4个文件夹作为项目的4个模块:

在Tabs中加载外部组件记得先引用文件,项目的基础结构代码如下:

import home from ‘./Home/Home’;
import contacts from ‘./Contact/Contacts’;
import Discover from ‘./Discover/Discover’;
import My from ‘./My/My’;

@Entry
@Component
struct Index {
build() {
Column() {
Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
//首页
TabContent() {
home()
}.tabBar()
//通讯录
TabContent() {
contacts()
}.tabBar()
//发现
TabContent() {
Discover()
}.tabBar()
//我
TabContent() {
My()
}.tabBar()
}
.vertical(false)
.barHeight(56)
.onChange((index: number) => {
this.currentIndex = index
})
.width(‘100%’)
.height(‘100%’)
.backgroundColor(‘#F1F3F5’)
}
.width(‘100%’)
.height(‘100%’)
}
}

接下来就可以分别在子控制器中开发对应的模块了。

首页

首先要注意的是微信、通讯录、发现、我这4个字控制器都是带导航栏的,所以最外部的容器是Navigation(),然后按照效果图配置导航栏的样式,比如首页的导航栏相关代码如下:

build() {

Navigation(){

}
.title(this.NavigationTitle())
.mode(NavigationMode.Stack)
.titleMode(NavigationTitleMode.Mini)
.hideBackButton(true)
.menus(this.NavigationMenus())
.size({ width: ‘100%’, height: ‘100%’ })
.backgroundColor(‘rgb(237,237,237)’)
}
@Builder NavigationMenus() {
Row() {
Image(‘/images/we_add.png’)
.size({ width: 24, height: 24 })
.margin({ left: 5 })
.onClick(()=>{
animateTo({
duration: 200,
}, () => {
if(this.menuOpacity == 0){
this.menuOpacity = 1
}else if(this.menuOpacity == 1){
this.menuOpacity = 0
}

})
})
}.justifyContent(FlexAlign.End)
}

@Builder NavigationTitle() {
Row(){
Text(“微信”)
.width(‘100’)
}
.width(‘100%’)
.justifyContent(FlexAlign.Center)
}

然后首页里比较难就是右上角弹窗了,虽然系统提供了弹窗组件menu,但是样式相差比较大,所以我们需要自己写一个。

弹窗可以分为两个部分,尖尖和矩形列表,它俩是一个Column布局:

这样代码就不难写了,首先绘制一个三角形,再放一个List组件就行了,具体代码如下:

Flex({direction:FlexDirection.Column,justifyContent:FlexAlign.Center}){
//绘制三角形
Path()
.width(20)
.height(20)
.commands(‘M25 0 L50 50 L0 50 Z’)
.fill(‘rgb(76,76,76)’)
.stroke(‘rgb(76,76,76)’)
.padding(0)
.margin(0)
.position({x:95,y:0})

//矩形列表
List(){
ListItem(){
MenuRow({imagePath:‘/images/menu_group.png’,titleString:‘发起群聊’})
}
ListItem(){
MenuRow({imagePath:‘/images/menu_add.png’,titleString:‘添加朋友’})
}
ListItem(){
MenuRow({imagePath:‘/images/menu_scan.png’,titleString:‘扫一扫’})
}
ListItem(){
MenuRow({imagePath:‘/images/menu_purchase.png’,titleString:‘收付款’})
}
}
.margin(0)
.borderRadius(5)

.padding({left:12})
.divider({ strokeWidth: 1, color: ‘rgb(130,130,130)’, startMargin: 20, endMargin: 0 }) // 每行之间的分界线
.backgroundColor(‘rgb(76,76,76)’)
.width(130)
.height(180)

}
.opacity(this.menuOpacity)
.width(130)
.height(200)
.margin({right:10,top:-10})

弹窗开发好了,新的问题来了,怎么样把它放到右上角呢?如果你看过层叠布局Stack的对齐样式,这个问题就不难了,在对齐样式中有一个TopEnd,然后微调一下边距就完成了。

通讯录

这个页面需要讲一下的地方是list组件的分块和右侧字母索引。

可以看到这个节目同一个List列表中出现了不同的样式,即不同的

ListItemGroup,上图中每一个红框为一个ListItemGroup,第一个ListItemGroup比较简单,但是下面3个是包含了itemHead的,代码示例如下:

@Builder itemHead(text:string) {
Text(text)
.fontSize(14)
.backgroundColor(Color.White)
.width(“100%”)
.padding(3)
}

ListItemGroup({header:this.itemHead(item[‘letter’])}){
ListItem(){
Flex({direction:FlexDirection.Row,alignItems:ItemAlign.Center}){
Image(p[‘avtar’])
.width(45)
.height(45)
.borderRadius(5)
Text(p[‘name’])
.fontSize(18)
.margin({left:10})
}
.height(55)
}
})

}
.margin({top:10})

字母索引的话用语言不太好讲,直接看代码来的更快:

@State letters: string[] = [‘L’,‘W’,‘Z’]

AlphabetIndexer({ arrayValue: this.letters, selected: 0 })
.color(Color.Black)
.selectedColor(0xFFFFFF) // 选中项文本颜色
.popupColor(0xFFFAF0) // 弹出框文本颜色
.selectedBackgroundColor(‘rgb(1,196,194)’) // 选中项背景颜色
.popupBackground(0xD2B48C) // 弹出框背景颜色
.usingPopup(true) // 是否显示弹出框
.selectedFont({ size: 13, weight: FontWeight.Bolder }) // 选中项字体样式
.popupFont({ size: 30, weight: FontWeight.Bolder }) // 弹出框内容的字体样式
.itemSize(20) // 每一项的尺寸大小
.alignStyle(IndexerAlign.Left) // 弹出框在索引条左侧弹出
.onSelect((index: number) => {
console.info(this.letters[index] + ’ Selected!')
})
.onPopupSelect((index: number) => {
console.info(‘onPopupSelected:’ + index)
})

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

lected:’ + index)
})

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
[外链图片转存中…(img-aUwem7ZE-1713680512470)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt Quick是Qt框架的一部分,用于开发跨平台的图形界面应用程序。它提供了一套功能强大、易于使用的工具和组件,能够快速地创建现代化的用户界面。 高仿微信是指使用Qt Quick来实现一个与微信界面相似的应用程序。借助Qt Quick的强大功能,可以轻松实现微信中常见的界面元素和交互效果,包括聊天界面、联系人列表、朋友圈等。 Qt Quick使用QML语言编写界面,具有声明式编程的特点,使得开发界面更加直观和灵活。开发者可以通过编写QML代码来描述界面的外观和行为,而无需深入了解底层的图形编程。 除了QML之外,Qt Quick还提供了一组丰富的可重用组件,如按钮、文本框、列表视图等,开发者可以直接使用这些组件来快速构建界面。同时,Qt Quick还支持自定义组件的开发开发者可以根据需要创建自己的独特组件。 在实现高仿微信过程中,可以利用Qt Quick的布局系统来构建复杂的界面布局,使用动画效果和过渡效果来增加用户体验,还可以通过Qt Quick提供的网络模块实现与服务器的通信,实现实时聊天功能。 总之,借助Qt Quick的强大功能和易用性,可以快速开发高仿微信的应用程序,实现类似的界面和功能。无论是从界面还是从交互体验方面,Qt Quick都能满足开发者的需求,并帮助开发者更加高效地开发出优秀的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值