前言
标题栏几乎是每个应用的标配,或多或少都会存在,在Android中一个简单的组合View就可以搞定,鸿蒙开发中,也是十分的简单,选择相对应的布局,然后设置组件即可。
你可以使用相对布局RelativeContainer 或者线性布局Row, 都可以进行实现,根据项目中的需求或者UI设计进行组件摆放,如上图所示,中间是标题,左右两个组件,简单实现如下:
TypeScript
Row() {
Text("返回").margin({ left: 10 })
Text("左右文字按钮")
Text("编辑").margin({ right: 10 })
}.width("100%")
.height(50)
.justifyContent(FlexAlign.SpaceBetween)
以上的代码仅是左中右三个组件的时候使用,可以发现,一个标题组合组件一点难度没有,也没有任何技术含量,在实际的开发中,如果有多种标题栏的形式,考虑到代码复用的情况,尽量抽取一个自定义组件,通过属性的控制,选择当前页面需要的组件即可。
比如,有的页面左边是图片,右边是图片,或者左边两个按钮,两个图片,或者图片文字相结合等等情况,在实际封装中,都是需要考虑的。
针对以上的各种情况,目前也做了一层简单的封装,已经上传至了中心仓库,有需要的朋友可以直接拿来使用。
中心仓库地址:
ohpm.openharmony.cn/#/cn/detail...
快速使用
方式一:在需要Module中的oh-package.json5中设置三方包依赖,配置示例如下:
text
"dependencies": { "@abner/bar": "^1.0.1"}
方式二:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。
建议:在使用的模块路径下进行执行命令。
text
ohpm install @abner/bar
初始化
初始化的作用,用于统一标题栏,比如宽高、字体颜色大小,统一点击事件等等,建议在AbilityStage中进行,属性 选择性调用,如果不需要,可以不设置。
TypeScript
initActionBar({})
相关属性
相关属性可以用于全局初始化或者单独使用都可以。
属性 | 类型 | 概述 |
---|---|---|
barWidth | Length | 标题栏宽度 |
barHeight | Length | 标题栏高度 |
barBackgroundColor | ResourceColor | 标题栏背景颜色 |
onTitleClick | 回调 | 标题点击事件 |
leftText | string/Resource | 左边按钮文字 |
left2Text | string/Resource | 左边第二个按钮文字 |
leftMenuMargin | Length | 左边按钮,默认距离左边 |
leftMenuBgColor | ResourceColor | 左边背景颜色 |
rightMenuBgColor | ResourceColor | 右边背景颜色 |
rightMenuMargin | Length | 右边按钮距离右边 |
leftMenuWidth | Length | 左边按钮整体宽度 |
leftMenuHeight | Length | 左边按钮整体高度 |
rightMenuWidth | Length | 右边按钮宽度 |
rightMenuHeight | Length | 右边按钮高度 |
onLeftClick | 回调 | 左边整体的点击 |
onLeftTextClick | 回调 | 左边文字按钮的点击 |
onLeftImageClick | 回调 | 左边图片按钮的点击 |
onRightClick | 回调 | 右边整体的点击 |
onRightTextClick | 回调 | 右边文字按钮的点击 |
onRightImageClick | 回调 | 右边图片按钮的点击 |
leftIcon | PixelMap/ ResourceStr/ DrawableDescriptor | 左边按钮第一个图标 |
left2Icon | PixelMap/ ResourceStr/ DrawableDescriptor | 左边按钮第二个图标 |
rightIcon | PixelMap/ ResourceStr/ DrawableDescriptor | 右边按钮第一个图标 |
right2Icon | PixelMap/ ResourceStr/ DrawableDescriptor | 右边按钮第二个图标 |
hideLeftMenu | boolean | 隐藏左边按钮,默认不隐藏 |
hideTitle | boolean | 隐藏标题,默认不隐藏 |
hideRightMenu | boolean | 隐藏右边按钮,默认不隐藏 |
isAvoidanceNavigation | boolean | 是否避让导航,默认不避让 |
titleAttribute | TitleAttribute | 标题通用属性,颜色大小等 |
leftMenuAttribute | BarMenuAttribute | 左边第一个按钮通用属性,颜色大小等 |
leftMenu2Attribute | BarMenuAttribute | 左边第二个按钮通用属性,颜色大小等 |
rightMenuAttribute | BarMenuAttribute | 右边第一个按钮通用属性,颜色大小等 |
rightMenu2Attribute | BarMenuAttribute | 右边第二个按钮通用属性,颜色大小等 |
基本使用
1、简单使用,就是一个普通的组件
TypeScript
ActionBar({
title: "普通单标题"
})
2、左侧文字按钮展示
TypeScript
ActionBar({
title: "左侧文字按钮",
leftText: "返回",
onLeftClick: () => {
console.log("====点击了左侧按钮")
},
})
3、左侧图片按钮
TypeScript
ActionBar({
title: "左侧图片按钮",
leftIcon: $r("app.media.app_icon"),
onLeftClick: () => {
console.log("====点击了左侧按钮")
},
})
4、右侧文字按钮
TypeScript
ActionBar({
title: "右侧文字按钮", rightText: "编辑",
onRightClick: () => {
console.log("====点击了右侧按钮")
}
})
5、右侧图片按钮
TypeScript
ActionBar({
title: "右侧图片按钮",
rightIcon: $r("app.media.app_icon"),
onRightClick: () => {
console.log("====点击了右侧按钮")
}
})
6、左右文字按钮
TypeScript
ActionBar({
title: "左右文字按钮",
leftText: "返回",
rightText: "编辑",
onLeftClick: () => {
console.log("====点击了左侧按钮")
},
onRightClick: () => {
console.log("====点击了右侧按钮")
}
})
7、左右图片按钮
TypeScript
ActionBar({
title: "左右图片按钮",
rightIcon: $r("app.media.app_icon"),
leftIcon: $r("app.media.app_icon"),
onLeftClick: () => {
console.log("====点击了左侧按钮")
},
onRightClick: () => {
console.log("====点击了右侧按钮")
}
})
8、左侧文字双按钮
TypeScript
ActionBar({
title: "左侧文字双按钮",
leftText: "按钮1",
left2Text: "按钮2",
leftMenuAttribute: {
textMargin: { right: 10 }
},
onLeftTextClick: (position) => {
console.log("====点击了左侧按钮:" + position)
}
})
9、左侧图片双按钮
TypeScript
ActionBar({
title: "左侧图片双按钮",
leftIcon: $r("app.media.app_icon"),
left2Icon: $r("app.media.app_icon"),
leftMenuAttribute: {
imageMargin: { right: 10 }
},
onLeftImageClick: (position) => {
console.log("====点击了左侧按钮:" + position)
}
})
10、右侧文字双按钮
TypeScript
ActionBar({
title: "右侧文字双按钮",
rightText: "按钮1",
right2Text: "按钮2",
rightMenuAttribute: {
textMargin: { left: 10 }
},
onRightTextClick: (position) => {
console.log("====点击了右侧按钮:" + position)
}
})
11、右侧图片双按钮
TypeScript
ActionBar({
title: "右侧图片双按钮",
rightIcon: $r("app.media.app_icon"),
right2Icon: $r("app.media.app_icon"),
rightMenu2Attribute: {
imageMargin: { left: 10 }
},
onRightImageClick: (position) => {
console.log("====点击了右侧按钮:" + position)
}
})
12、左右文字双按钮
TypeScript
ActionBar({
title: "左右文字双按钮",
leftText: "按钮1",
left2Text: "按钮2",
leftMenuAttribute: {
textMargin: { right: 10 }
},
onLeftTextClick: (position) => {
console.log("====点击了左侧按钮:" + position)
},
rightText: "按钮1",
right2Text: "按钮2",
rightMenuAttribute: {
textMargin: { left: 10 }
},
onRightTextClick: (position) => {
console.log("====点击了右侧按钮:" + position)
}
})
13、左侧图文
TypeScript
ActionBar({
title: "左侧图文",
leftText: "返回",
leftIcon: $r("app.media.app_icon"),
leftMenuType: MenuType.IMAGE_TEXT,
leftMenuAttribute: {
imageMargin: {
right: 10
}
},
onLeftClick: () => {
console.log("============点击了整个")
}
})
14、左侧文图
TypeScript
ActionBar({
title: "左侧文图",
leftText: "返回",
leftIcon: $r("app.media.app_icon"),
leftMenuType: MenuType.TEXT_IMAGE,
leftMenuAttribute: {
textMargin: {
right: 10
}
},
onLeftClick: () => {
console.log("============点击了整个")
}
})
15、右侧图文
TypeScript
ActionBar({
title: "右侧图文",
rightText: "编辑",
rightIcon: $r("app.media.app_icon"),
rightMenuType: MenuType.IMAGE_TEXT,
rightMenuAttribute: {
imageMargin: {
right: 10
}
},
onRightClick: () => {
console.log("============点击了整个")
}
})
16、右侧文图
TypeScript
ActionBar({
title: "右侧文图",
rightText: "编辑",
rightIcon: $r("app.media.app_icon"),
rightMenuType: MenuType.TEXT_IMAGE,
rightMenuAttribute: {
textMargin: {
right: 10
}
},
onRightClick: () => {
console.log("============点击了整个")
}
})
17、自定义标题
TypeScript
ActionBar({
titleLayout: this.titleLayout
})
18、左侧按钮自己定义
TypeScript
ActionBar({
title: "左侧按钮自己定义",
leftMenuLayout: this.leftMenuLayout
})
19、右侧按钮自己定义
TypeScript
ActionBar({
title: "右侧按钮自己定义",
rightMenuLayout: this.rightMenuLayout
})
使用总结
本省就是一个很简单的标题栏组件,没有什么过多的技术含量,有一点需要注意,当使用沉浸式的时候,注意标题栏的位置,需要避让状态栏。