鸿蒙开发:自定义一个简单的标题栏

前言

标题栏几乎是每个应用的标配,或多或少都会存在,在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
})

使用总结

本省就是一个很简单的标题栏组件,没有什么过多的技术含量,有一点需要注意,当使用沉浸式的时候,注意标题栏的位置,需要避让状态栏。

相关推荐
拭心2 小时前
Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
android
AORO_BEIDOU3 小时前
单北斗+鸿蒙系统+国产芯片,遨游防爆手机自主可控“三保险”
华为·智能手机·harmonyos
带电的小王4 小时前
WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
android·智能手机·whisper·qualcomm
梦想平凡4 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
元争栈道5 小时前
webview和H5来实现的android短视频(短剧)音视频播放依赖控件
android·音视频
博览鸿蒙5 小时前
鸿蒙操作系统(HarmonyOS)的应用开发入门
华为·harmonyos
阿甘知识库5 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
元争栈道6 小时前
webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
android·音视频
MuYe6 小时前
Android Hook - 动态加载so库
android
恋猫de小郭6 小时前
什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
flutter·ios·swiftui