【时间盒子】-【7.标题菜单栏】自定义任务页面顶部的标题菜单栏组件-鸿蒙开发者社区-51CTO.COM

【时间盒子】-【7.标题菜单栏】自定义任务页面顶部的标题菜单栏组件 原创

与辉鸿蒙
发布于 2024-11-15 22:40
浏览
0收藏

Tips:

  • media媒体资源的使用;
  • float.json、color.json资源文件的使用;
  • 组件属性的定义。
    预览效果:
    【时间盒子】-【7.标题菜单栏】自定义任务页面顶部的标题菜单栏组件-鸿蒙开发者社区
    一、创建组件文件
    右击component目录 >> 新建 >> ArkTS File,文件命名为TitleContainer.ets。
    【时间盒子】-【7.标题菜单栏】自定义任务页面顶部的标题菜单栏组件-鸿蒙开发者社区
@Preview
@Component
export default struct TitleContainer {
  build() {
    // 行布局
    Row() {
      
    }
  }
}

二、组件布局
使用Row容器进行行布局,从左到右分别是:返回按钮(图片)、标题内容(文本)、确定按钮(图片)。在images目录下添加按钮图片,图片文件见文章最后的附件。

build() {
  // 行布局
  Row() {
    // 返回按钮
    Button() {
      Image('images/icon_back.png')
        .objectFit(ImageFit.Fill);
    }
    .width(24)
    .height(24)
    .backgroundColor("#00000000")
    .onClick(() => {
      //TODO 按钮事件

    });

    // 标题内容
    Text('标题')
      .fontSize(20)
      .lineHeight(28)
      .fontColor('#182431')
      .fontWeight(FontWeight.Bold)
      .margin({ left: 16 });

    // 占位
    Blank();
  }
  .width("100%")
  .height(56)
  .padding({ left: 24, right: 24 });
}

效果如下:
【时间盒子】-【7.标题菜单栏】自定义任务页面顶部的标题菜单栏组件-鸿蒙开发者社区
三、组件属性
为了更灵活方便页面使用该组件时,可自定义返回按钮的图片、标题内容和点击返回按钮时触发的事件,我们需要给组件定义对应的三个属性,使用组件时给组件传参数值。

// 返回按钮图片
private backImg: string | Resource = $r("app.media.icon_cancel");
// 返回按钮点击事件
private backFunc?: () => void;
// 标题
private title: string | Resource = "标题";

四、代码优化

build() {
  // 行布局
  Row() {
    // 返回按钮
    Button() {
      Image(this.backImg == null ? $r("app.media.icon_back") : this.backImg)
        .objectFit(ImageFit.Fill);
    }
    .width(SizeUtil.getVp($r("app.float.title_button_size")))
    .height(SizeUtil.getVp($r("app.float.title_button_size")))
    .backgroundColor("#00000000")
    .onClick(() => {
      this.backFunc ? this.backFunc : router.back();
    });

    // 标题内容
    Text(this.title)
      .fontSize(SizeUtil.getFp($r("app.float.title_font_size")))
      .lineHeight(SizeUtil.getVp($r("app.float.title_line_height")))
      .fontColor($r("app.color.grey_divider"))
      .fontWeight(FontWeight.Bold)
      .margin({ left: SizeUtil.getVp($r("app.float.title_margin")) });

    // 占位
    Blank();
    if (this.closeHandle) {
      this.closeHandle();
    }
  }
  .width("100%")
  .height(SizeUtil.getVp($r("app.float.title_height")))
  .padding({
    left: SizeUtil.getVp($r("app.float.title_horizon_margin")),
    right: SizeUtil.getVp($r("app.float.title_horizon_margin"))
  });
}

float.json文件

{
  "name": "title_button_size",
  "value": "24"
},
{
  "name": "title_font_size",
  "value": "20"
},
{
  "name": "title_line_height",
  "value": "28"
},
{
  "name": "title_margin",
  "value": "16"
},
{
  "name": "title_height",
  "value": "56"
},
{
  "name": "title_horizon_margin",
  "value": "24"
}

color.json文件

{
  "name": "grey_divider",
  "value": "#182431"
}

图片请见关联的资源可下载。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
按钮图片.zip 2.11K 0次下载
收藏
回复
举报
回复
    相关推荐