效果图:
实现代码:
Index.ets
@Entry
@Component
struct Index {
@State currentIndex: number = 0; // 设置当前选中的Index
@State msgCount: number = 1; // 消息数量
@State cartCount: number = 2; // 购物车数量
@Builder tabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
Column() {
Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
.size({ width: 25, height: 25 })
Text(title)
.fontColor(this.currentIndex === targetIndex ? '#1698CE' : '#6B6B6B')
.fontSize(14)
// 判断显示红点
if(targetIndex === 2 || targetIndex === 3){
Text(targetIndex === 2 ? this.msgCount+"" : this.cartCount+"")
.id("textTab")
.textAlign(TextAlign.Center)
.backgroundColor(Color.Red)
.borderRadius(10)
.fontSize(12)
.fontColor(Color.White)
.width(20)
.height(20)
.alignRules({
left: { anchor: 'textTab', align: HorizontalAlign.End },
center: { anchor: 'textTab', align: VerticalAlign.Center }
})
.position({
top:3,
right:15
})
}
}
.width("100%")
.height(50)
.justifyContent(FlexAlign.Center)
}
build() {
Column(){
Tabs(){
TabContent(){
}
.tabBar(this.tabBuilder('首页', 0, $rawfile("home_selected.png"), $rawfile("home_unselected.png")))
TabContent(){
}
.tabBar(this.tabBuilder('视频', 1, $rawfile("video_selected.png"), $rawfile("video_unselected.png")))
TabContent(){
}
.tabBar(this.tabBuilder('消息', 2, $rawfile("msg_selected.png"), $rawfile("msg_unselected.png")))
TabContent(){
}
.tabBar(this.tabBuilder('购物车', 3, $rawfile("cart_selected.png"), $rawfile("cart_unselected.png")))
TabContent(){
}
.tabBar(this.tabBuilder('我的', 4, $rawfile("my_selected.png"), $rawfile("my_unselected.png")))
}
.barPosition(BarPosition.End) // 设置底部导航
.barMode(BarMode.Fixed) // 设置固定导航栏
.scrollable(false) // 设置不滚动
.animationDuration(0) // 设置动画执行时间
.onChange((curIndex)=>{
this.currentIndex = curIndex
})
}
.width("100%")
.height("100%")
}
}
参考API:
原创文章,作者:czhdawn,如若转载,请注明出处:https://www.czhdawn.cn/archives/4809
