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

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

前言

标题栏几乎是每个应用的标配,或多或少都会存在,在Android中一个简单的组合View就可以搞定,鸿蒙开发中,也是十分的简单,选择相对应的布局,然后设置组件即可。

你可以使用相对布局RelativeContainer或者线性布局Row,都可以进行实现,根据项目中的需求或者UI设计进行组件摆放,如上图所示,中间是标题,左右两个组件,简单实现如下:

Row() {
  Text("返回").margin({ left: 10 })
  Text("左右文字按钮")
  Text("编辑").margin({ right: 10 })
}.width("100%")
  .height(50)
  .justifyContent(FlexAlign.SpaceBetween)


以上的代码仅是左中右三个组件的时候使用,可以发现,一个标题组合组件一点难度没有,也没有任何技术含量,在实际的开发中,如果有多种标题栏的形式,考虑到代码复用的情况,尽量抽取一个自定义组件,通过属性的控制,选择当前页面需要的组件即可。



比如,有的页面左边是图片,右边是图片,或者左边两个按钮,两个图片,或者图片文字相结合等等情况,在实际封装中,都是需要考虑的。

针对以上的各种情况,目前也做了一层简单的封装,已经上传至了中心仓库,有需要的朋友可以直接拿来使用。


中心仓库地址:


https://ohpm.openharmony.cn/#/cn/detail/@abner%2Fbar


快速使用


方式一:在需要Module中的oh-package.json5中设置三方包依赖,配置示例如下:

"dependencies": { "@abner/bar": "^1.0.1"}

方式二:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。

建议:在使用的模块路径下进行执行命令。

ohpm install @abner/bar


初始化


初始化的作用,用于统一标题栏,比如宽高、字体颜色大小,统一点击事件等等,建议在AbilityStage中进行,属性 选择性调用,如果不需要,可以不设置。


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、简单使用,就是一个普通的组件


ActionBar({
  title: "普通单标题"
})


2、左侧文字按钮展示


ActionBar({
  title: "左侧文字按钮",
  leftText: "返回",
  onLeftClick: () => {
    console.log("====点击了左侧按钮")
  },
})


3、左侧图片按钮


ActionBar({
  title: "左侧图片按钮",
  leftIcon: $r("app.media.app_icon"),
  onLeftClick: () => {
    console.log("====点击了左侧按钮")
  },
})


4、右侧文字按钮


ActionBar({
  title: "右侧文字按钮", rightText: "编辑",
  onRightClick: () => {
    console.log("====点击了右侧按钮")
  }
})


5、右侧图片按钮


ActionBar({
  title: "右侧图片按钮",
  rightIcon: $r("app.media.app_icon"),
  onRightClick: () => {
    console.log("====点击了右侧按钮")
  }
})


6、左右文字按钮


ActionBar({
  title: "左右文字按钮",
  leftText: "返回",
  rightText: "编辑",
  onLeftClick: () => {
    console.log("====点击了左侧按钮")
  },
  onRightClick: () => {
    console.log("====点击了右侧按钮")
  }
})


7、左右图片按钮


ActionBar({
  title: "左右图片按钮",
  rightIcon: $r("app.media.app_icon"),
  leftIcon: $r("app.media.app_icon"),
  onLeftClick: () => {
    console.log("====点击了左侧按钮")
  },
  onRightClick: () => {
    console.log("====点击了右侧按钮")
  }
})


8、左侧文字双按钮


ActionBar({
  title: "左侧文字双按钮",
  leftText: "按钮1",
  left2Text: "按钮2",
  leftMenuAttribute: {
    textMargin: { right: 10 }
  },
  onLeftTextClick: (position) => {
    console.log("====点击了左侧按钮:" + position)
  }
})


9、左侧图片双按钮


ActionBar({
  title: "左侧图片双按钮",
  leftIcon: $r("app.media.app_icon"),
  left2Icon: $r("app.media.app_icon"),
  leftMenuAttribute: {
    imageMargin: { right: 10 }
  },
  onLeftImageClick: (position) => {
    console.log("====点击了左侧按钮:" + position)
  }
})


10、右侧文字双按钮


ActionBar({
  title: "右侧文字双按钮",
  rightText: "按钮1",
  right2Text: "按钮2",
  rightMenuAttribute: {
    textMargin: { left: 10 }
  },
  onRightTextClick: (position) => {
    console.log("====点击了右侧按钮:" + position)
  }
})


11、右侧图片双按钮


ActionBar({
  title: "右侧图片双按钮",
  rightIcon: $r("app.media.app_icon"),
  right2Icon: $r("app.media.app_icon"),
  rightMenu2Attribute: {
    imageMargin: { left: 10 }
  },
  onRightImageClick: (position) => {
    console.log("====点击了右侧按钮:" + position)
  }
})


12、左右文字双按钮


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、左侧图文


ActionBar({
  title: "左侧图文",
  leftText: "返回",
  leftIcon: $r("app.media.app_icon"),
  leftMenuType: MenuType.IMAGE_TEXT,
  leftMenuAttribute: {
    imageMargin: {
      right: 10
    }
  },
  onLeftClick: () => {
    console.log("============点击了整个")
  }
})


14、左侧文图


ActionBar({
  title: "左侧文图",
  leftText: "返回",
  leftIcon: $r("app.media.app_icon"),
  leftMenuType: MenuType.TEXT_IMAGE,
  leftMenuAttribute: {
    textMargin: {
      right: 10
    }
  },
  onLeftClick: () => {
    console.log("============点击了整个")
  }
})


15、右侧图文


ActionBar({
  title: "右侧图文",
  rightText: "编辑",
  rightIcon: $r("app.media.app_icon"),
  rightMenuType: MenuType.IMAGE_TEXT,
  rightMenuAttribute: {
    imageMargin: {
      right: 10
    }
  },
  onRightClick: () => {
    console.log("============点击了整个")
  }
})


16、右侧文图


ActionBar({
  title: "右侧文图",
  rightText: "编辑",
  rightIcon: $r("app.media.app_icon"),
  rightMenuType: MenuType.TEXT_IMAGE,
  rightMenuAttribute: {
    textMargin: {
      right: 10
    }
  },
  onRightClick: () => {
    console.log("============点击了整个")
  }
})


17、自定义标题


ActionBar({
  titleLayout: this.titleLayout
})


18、左侧按钮自己定义


ActionBar({
  title: "左侧按钮自己定义",
  leftMenuLayout: this.leftMenuLayout
})


19、右侧按钮自己定义


ActionBar({
  title: "右侧按钮自己定义",
  rightMenuLayout: this.rightMenuLayout
})

使用总结


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

相关文章
|
7天前
|
监控 开发者
鸿蒙5.0版开发:使用HiLog打印日志(ArkTS)
在HarmonyOS 5.0中,HiLog是系统提供的日志系统,支持DEBUG、INFO、WARN、ERROR、FATAL五种日志级别。本文介绍如何在ArkTS中使用HiLog打印日志,并提供示例代码。通过合理使用HiLog,开发者可以更好地调试和监控应用。
41 16
|
7天前
|
监控 UED 开发者
鸿蒙next版开发:订阅应用事件(ArkTS)
在HarmonyOS 5.0中,ArkTS引入了强大的应用事件订阅机制,允许开发者订阅和处理系统或应用级别的事件,这对于监控应用行为、优化用户体验和进行性能分析至关重要。本文详细介绍了如何在ArkTS中订阅应用事件,并提供了示例代码,包括导入模块、创建观察者、设置事件参数等步骤。通过这些方法,开发者可以更智能地管理和响应应用事件。
40 11
|
6天前
|
UED
鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了强大的相机开发能力,特别是针对折叠屏设备的摄像头适配。本文详细介绍了如何在ArkTS中检测和适配不同折叠状态下的摄像头变更,确保相机应用在不同设备状态下的稳定性和用户体验。通过代码示例展示了具体的实现步骤。
29 8
|
6天前
|
API 内存技术
鸿蒙next版开发:相机开发-拍照(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了一套完整的API来管理相机功能,特别是拍照功能。本文详细介绍如何在ArkTS中实现拍照功能,包括导入接口、创建会话、配置会话、触发拍照及监听拍照输出流状态,并提供代码示例进行详细解读。通过本文,你将掌握如何在HarmonyOS 5.0中使用ArkTS实现高效的拍照功能。
25 7
|
6天前
|
监控 开发者
鸿蒙next版开发:使用HiDebug获取调试信息(ArkTS)
在HarmonyOS 5.0中,HiDebug是一个强大的应用调试工具,可帮助开发者获取系统的CPU使用率、内存信息等关键性能数据。本文详细介绍了如何在ArkTS中使用HiDebug,并提供了示例代码,帮助开发者进行性能分析和问题诊断。
24 7
|
1天前
|
API
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
鸿蒙开发:切换至基于rcp的网络请求
|
6天前
|
前端开发 API
鸿蒙next版开发:相机开发-预览(ArkTS)
在HarmonyOS 5.0中,使用ArkTS进行相机预览是核心功能之一。本文详细介绍了如何使用ArkTS实现相机预览,包括导入相机接口、创建Surface、获取相机输出能力、创建会话并开始预览,以及监听预览输出状态等步骤,并提供了代码示例。通过本文,读者可以掌握在HarmonyOS 5.0中使用ArkTS进行相机预览的基本方法。
23 6
|
6天前
|
编解码 开发工具 计算机视觉
鸿蒙5.0版开发:命令行工具(mediatool工具)
在HarmonyOS 5.0的开发中,命令行工具mediatool基于FFmpeg库,提供了丰富的媒体处理功能,如视频和音频的转码、封装格式转换、提取媒体信息等。本文详细介绍mediatool的功能和使用方法,并提供代码示例。
24 6
|
6天前
|
监控 Shell API
鸿蒙next版开发:使用HiChecker检测问题(ArkTS)
在HarmonyOS 5.0中,HiChecker是一个强大的工具,帮助开发者检测应用中的潜在问题,如耗时调用和资源泄露。本文详细介绍了如何在ArkTS中使用HiChecker,包括添加检测规则、触发检测和日志输出等步骤,并提供了示例代码。通过合理使用HiChecker,开发者可以提高应用的稳定性和性能。
21 6
|
6天前
|
前端开发 开发者
鸿蒙next版开发:相机开发-元数据(ArkTS)
在HarmonyOS 5.0中,ArkTS新增了对相机元数据的访问能力,帮助开发者获取图像的详细信息。本文介绍了如何在ArkTS中获取和使用相机元数据,包括导入接口、创建元数据输出流、开启和停止元数据输出、监听元数据对象可用事件等步骤,并提供了详细的代码示例。
23 5