鸿蒙开发实战终极案例--高仿微信App(附源码),2024年最新字节跳动开发岗面试

187 阅读7分钟

.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) })

至于发现和我这两个模块都比较简单,不再一一赘述。

需要本次内容完整源码,请点击下方链接直接获取

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(**ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony****多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)**技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(Harmony NEXT)最新学习路线

  • HarmonOS基础技能

  • HarmonOS就业必备技能 
  • HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例

img img

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

需要这份系统化的资料的朋友,可以戳这里获取

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