当前位置:   article > 正文

【HarmonyOS】自定义组件之ArkUI实现通用标题栏组件_arkui onclick 传递fun

arkui onclick 传递fun

【关键字】

标题栏、常用内置组件整合、ArkUI、自定义组件

1、写在前面

在上一篇文章中我们通过Java语言实现了一个通用的标题栏组件,有需要的可以看下,文章地址:

华为开发者论坛

现在很多朋友都已经转战ArkTS语言了,那么今天就来使用ArkTS实现一个同样的通用标题栏组件,样式选择还和之前保持一致,左侧文本按钮、中间文本、右侧图片按钮,关于样式,大家可以自行根据项目实际需求进行修改,废话不多说,下面进入代码实战吧!

2、自定义标题栏

首先,新建一个CommonTitleBar.ets文件,在该文件中封装通用标题栏组件:

cke_501.png

然后,定义标题栏组件需要的相关属性:

cke_1153.png

最后,在标题栏组件类中使用内置组件拼装组合,创建上面定义的属性类的类型的变量,在内置组件中的相应属性通过该变量控制,如下图所示:

cke_1999.png

完整的自定义标题栏组件代码如下:

  1. @Component
  2. export struct CommonTitleBar {
  3. // 标题栏属性
  4. public attribute: CommonTitleBarAttribute;
  5. build() {
  6. Flex() {
  7. Stack({ alignContent: Alignment.Start }) {
  8. Text(this.attribute.close_text)
  9. .fontSize(16)
  10. .width(60)
  11. .height('100%')
  12. .onClick(() => {
  13. this.attribute.closeCallback?.call(this)
  14. })
  15. }
  16. .padding({ left: 15 })
  17. .layoutWeight(1)
  18. Stack({ alignContent: Alignment.Center }) {
  19. Text(this.attribute.title_text)
  20. .fontSize(16)
  21. .fontColor('#0000ff')
  22. .width(60)
  23. .textAlign(TextAlign.Center)
  24. .height('100%')
  25. }
  26. .layoutWeight(2)
  27. Stack({ alignContent: Alignment.End }) {
  28. Image($r('app.media.menu'))
  29. .width(40)
  30. .height(40)
  31. .objectFit(ImageFit.Contain)
  32. .onClick(() => {
  33. this.attribute.menuCallback?.call(this)
  34. })
  35. }
  36. .padding({ right: 15 })
  37. .height('100%')
  38. .layoutWeight(1)
  39. }
  40. .width('100%')
  41. .height(48)
  42. .backgroundColor(this.attribute.bg_color)
  43. }
  44. }
  45. // 定义标题栏属性
  46. class CommonTitleBarAttribute {
  47. public bg_color: string = ""; // 标题栏背景色
  48. public close_text: string = ""; // 关闭按钮文字
  49. public closeCallback: () => void; // 关闭按钮事件回调
  50. public title_text: string = ""; // 标题文字
  51. public menuCallback: () => void; // 菜单按钮事件回调
  52. }

3、使用标题栏组件

上面定义好了标题栏组件,下面开始在别的页面引用该组件,在首页Index.ets中引用,首先导入该组件:

cke_5402.png

然后引用该组件,为组件配置相应的属性值:

cke_7898.png

完整代码如下:

  1. import prompt from '@ohos.prompt';
  2. import { CommonTitleBar } from './CommonTitleBar';
  3. @Entry
  4. @Component
  5. struct Index {
  6. build() {
  7. Column() {
  8. CommonTitleBar({attribute:{
  9. bg_color:'#ff2ad4b2',
  10. close_text: '返回',
  11. closeCallback:()=>{
  12. prompt.showToast({
  13. message: '点击返回按钮',
  14. duration: 2000
  15. });
  16. },
  17. title_text: '标题',
  18. menuCallback:()=>{
  19. prompt.showToast({
  20. message: '点击菜单按钮',
  21. duration: 2000
  22. });
  23. }
  24. }})
  25. Text('内容')
  26. .fontSize(20)
  27. .textAlign(TextAlign.Center)
  28. .width('100%')
  29. .height('100%')
  30. }
  31. .width('100%')
  32. .height('100%')
  33. }
  34. }

最后一起来看一下实现的效果吧:

cke_12936.pngcke_14700.png

 欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号