《农物购》app开发技术分享《二》-- HarmonyOS 鸿蒙Next导航栏功能实现
《农物购》app开发技术分享《二》-- HarmonyOS 鸿蒙Next导航栏功能实现 在上一节我们实现了一个简单的商城框架,接下来来到了第二个小阶段,因为我们用的是tabs默认的样式,我们知道大部分商城的底部导航栏样式都是上图片下文字的,这一节我们实现这种样式和部分的首页ui。
开发准备
我们要先对单个选项进行分析,我们都需要什么组件逻辑实现
实现的效果如图所示:
通过图片我们可以看到,我们需要进行一个上下结构组合起来的按钮,并且有图片和文字,当我们选中某一条底部的图片和字体也要发生相应的变化。
知道了我们要实现的功能接下来我们就开始实现代码,tabs的tabBar支持传入@Builder ,那我们就自定义一个导航栏传入进去
首先我们定义一个参数来接收选中的下标
@State currentIndex: number = 0
然后实现一个自定义导航栏,同时定义好参数,分别是显示的文字、下标、选中图片样式、未选中图片样式,间距,以及字体选中未选中的样式和颜色
[@Builder](/user/Builder) tabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
Column() {
Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
.size({ width: 30, height: 30 })
Text(title)
.fontSize(this.currentIndex === targetIndex ? 16:14)
.margin({top:5})
.fontWeight(this.currentIndex === targetIndex ? FontWeight.Bold:FontWeight.Normal)
.fontColor(this.currentIndex === targetIndex ? '#ffe5960b' : '#6B6B6B')
}
.width('100%')
.height(50)
.justifyContent(FlexAlign.Center)
}
实现完成之后,我们把他传入tabs中,保存代码查看预览器中的效果
可以看到我们首页已经变成了上下结构,但是我们选中的是第二条分类,为什么首页的未选中状态没有修改呢?其实我们在tabs中还需要一个onchange方法,来接收当前的下标。
.onChange((index: number) => {
this.currentIndex = index
})
这样把下标传递给我们定义好的参数,现在运行代码再试一次。
现在我们填加完方法再次选中分类,可以看到首页选项的样式已经发生了变化,接下来我们如法炮制,把其他选项的内容也替换一下。
@Entry
@Component
struct Index {
@State currentIndex: number = 0
[@Builder](/user/Builder) tabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
Column() {
Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
.size({ width: 30, height: 30 })
Text(title)
.fontSize(this.currentIndex === targetIndex ? 16:14)
.margin({top:5})
.fontWeight(this.currentIndex === targetIndex ? FontWeight.Bold:FontWeight.Normal)
.fontColor(this.currentIndex === targetIndex ? '#ffe5960b' : '#6B6B6B')
}
.width('100%')
.height(50)
.justifyContent(FlexAlign.Center)
}
build() {
Column() {
Tabs({barPosition:BarPosition.End}) {
TabContent() {
Text('首页').fontSize(30)
}
.tabBar(this.tabBuilder("首页",0,$r('app.media.index1_check'),$r('app.media.index1_not_check')))
TabContent() {
Text('分类').fontSize(30)
}
.tabBar(this.tabBuilder("分类",1,$r('app.media.index2_check'),$r('app.media.index2_not_check')))
TabContent() {
Text('购物车').fontSize(30)
}
.tabBar(this.tabBuilder("购物车",2,$r('app.media.index3_check'),$r('app.media.index3_not_check')))
TabContent() {
Text('我的').fontSize(30)
}
.tabBar(this.tabBuilder("我的",3,$r('app.media.index4_check'),$r('app.media.index4_not_check')))
}
.onChange((index: number) => {
this.currentIndex = index
})
}
.height('100%')
.width('100%')
}
}
现在我们完善好了逻辑执行代码展示如下
可以看到底部的导航栏已经实现了。
更多关于《农物购》app开发技术分享《二》-- HarmonyOS 鸿蒙Next导航栏功能实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
能不能实现 tab 图标中部分元素动画,比如主题中首页图标白色部分动画,分类中立着的正方形实现动画,购物车的轮子元素动画
更多关于《农物购》app开发技术分享《二》-- HarmonyOS 鸿蒙Next导航栏功能实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中实现《农物购》app的Next导航栏功能,主要依赖于鸿蒙系统提供的UI框架和组件。开发者需利用ArkUI(包括eTS和JS UI框架)进行界面布局和交互逻辑的实现。
具体步骤如下:
-
布局设计:在页面的布局文件中,使用相应的组件(如DirectionalLayout、StackLayout等)来设计导航栏的布局。确保导航栏中的元素(如返回按钮、标题、Next按钮等)按需求排列。
-
事件监听:为Next按钮添加点击事件监听器。当用户点击该按钮时,触发相应的逻辑处理,如跳转到下一个页面或执行特定的功能。
-
页面跳转:若Next按钮的功能是跳转到下一个页面,则需使用鸿蒙提供的页面跳转API(如navigator.push等)来实现。
-
样式定制:根据app的整体风格,对导航栏的样式进行定制,包括颜色、字体、图标等。
完成上述步骤后,即可在HarmonyOS鸿蒙系统中实现《农物购》app的Next导航栏功能。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html