這段時間一直學習鴻蒙os開發知識,由於ArkUI
內建的導航條元件功能有限,於是就自己開發了一個自定義harmonyos導航條元件。
HMNavBar導航條支援返回鍵、標題/副標題、標題居中、背景色/背景圖片/背景漸變色、標題顏色、搜尋、右側操作區
等功能。
@Component
export struct HMNavBar {
// 是否隱藏左側的返回鍵
@Prop hideBackButton: boolean
// 標題(支援字串|自定義元件)
@BuilderParam title: ResourceStr | CustomBuilder = BuilderFunction
// 副標題
@BuilderParam subtitle: ResourceStr | CustomBuilder = BuilderFunction
// 返回鍵圖示
@Prop backButtonIcon: Resource | undefined = $r('sys.symbol.chevron_left')
// 返回鍵標題
@Prop backButtonTitle: ResourceStr
// 背景色
@Prop bgColor: ResourceColor = $r('sys.color.background_primary')
// 漸變背景色
@Prop bgLinearGradient: LinearGradient
// 圖片背景
@Prop bgImage: ResourceStr | PixelMap
// 標題顏色
@Prop fontColor: ResourceColor
// 標題是否居中
@Prop centerTitle: boolean
// 右側按鈕區域
@BuilderParam actions: Array<ActionMenuItem> | CustomBuilder = BuilderFunction
// 導航條高度
@Prop navbarHeight: number = 56
// ...
}
HMNavBar({
backButtonIcon: $r('sys.symbol.arrow_left'),
title: '鴻蒙自定義導航欄',
subtitle: 'HarmonyOS Next 5.0自定義導航欄',
})
@Builder customImgTitle() {
Image('https://developer.huawei.com/allianceCmsResource/resource/HUAWEI_Developer_VUE/images/logo-developer-header.svg').height(24).objectFit(ImageFit.Contain)
}
HMNavBar({
backButtonIcon: $r('sys.symbol.chevron_left'),
backButtonTitle: '返回',
title: this.customImgTitle,
subtitle: '鴻蒙5.0 api 12',
centerTitle: true,
bgColor: '#f3f6f9',
fontColor: '#0a59f7',
actions: [
{
icon: $r('app.media.app_icon'),
action: () => promptAction.showToast({ message: "show toast index 1" })
},
{
// icon: $r('sys.symbol.plus'),
label: '更多>',
color: '#bd43ff',
action: () => promptAction.showToast({ message: "show toast index 2" })
}
]
})
// 自定義漸變背景、背景圖片、右側操作區
HMNavBar({
hideBackButton: true,
title: 'HarmonyOS',
subtitle: 'harmonyos next 5.0 api 12',
bgLinearGradient: {
angle: 135,
colors: [['#42d392 ',0.2], ['#647eff',1]]
},
// bgImage: 'pages/assets/nav_bg.png',
// bgImage: 'https://developer.huawei.com/allianceCmsResource/resource/HUAWEI_Developer_VUE/images/1025-pc-banner.jpeg',
fontColor: '#fff',
actions: [
{
icon: 'https://developer.huawei.com/allianceCmsResource/resource/HUAWEI_Developer_VUE/images/yuanfuwuicon.png',
action: () => promptAction.showToast({ message: "show toast index 1" })
},
{
icon: 'https://developer.huawei.com/allianceCmsResource/resource/HUAWEI_Developer_VUE/images/0620logo4.png',
action: () => promptAction.showToast({ message: "show toast index 2" })
},
{
icon: $r('sys.symbol.person_crop_circle_fill_1'),
action: () => promptAction.showToast({ message: "show toast index 3" })
}
],
navbarHeight: 70
})
HMNavBar({
title: this.customSearchTitle1,
actions: this.customSearchAction
})
HMNavBar({
hideBackButton: true,
title: this.customSearchTitle2,
bgColor: '#0051ff',
})
HMNavBar({
backButtonIcon: $r('sys.symbol.arrow_left'),
backButtonTitle: '鴻蒙',
title: this.customSearchTitle3,
bgColor: '#c543fd',
fontColor: '#fff',
actions: [
{
icon: $r('sys.symbol.mic_fill'),
action: () => promptAction.showToast({ ... })
}
]
})
build() {
Flex() {
// 左側模組
Stack({ alignContent: Alignment.Start }) {
Flex(){
if(!this.hideBackButton) {
this.backBuilder()
}
if(!this.centerTitle) {
this.contentBuilder()
}
}
.height('100%')
}
.height('100%')
.layoutWeight(1)
// 中間模組
if(this.centerTitle) {
Stack() {
this.contentBuilder()
}
.height('100%')
.layoutWeight(1)
}
// 右鍵操作模組
Stack({ alignContent: Alignment.End }) {
this.actionBuilder()
}
.padding({ right: 16 })
.height('100%')
.layoutWeight(this.centerTitle ? 1 : 0)
}
.backgroundColor(this.bgColor)
.linearGradient(this.bgLinearGradient)
.backgroundImage(this.bgImage, ImageRepeat.NoRepeat).backgroundImageSize(ImageSize.FILL)
.height(this.navbarHeight)
.width('100%')
}
ArkUI實現自定義漸變背景。
.linearGradient({
angle: 135,
colors: [['#42d392 ',0.2], ['#647eff',1]]
})
ArkUI除了linearGradient
線性漸變外,還提供sweepGradient
角度漸變、radialGradient
徑向漸變。
還可以使用direction
引數,從某一固定方向到另一個方向漸變,比如RightTop右上角->左下角。
vue3+tauri2.0桌面端後臺Exe系統|tauri2+rust+vite5管理系統後臺模板
vite5+tauri2.0客戶端仿微信Exe聊天程式|tauri2+rust+vue3聊天例項
vue3+electron31仿微信客戶端Exe聊天
Electron32-ViteOS桌面版os系統|vue3+electron+arco客戶端OS管理模板
Ending,感謝各位的閱讀與支援!