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

news2024/11/17 5:32:55

Tips:

  • media媒体资源的使用;

  • float.json、color.json资源文件的使用;

  • 组件属性的定义。

预览效果:

 

一、创建组件文件

右击component目录 >> 新建 >> ArkTS File,文件命名为TitleContainer.ets。

@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 });
}

三、组件属性

为了更灵活方便页面使用该组件时,可自定义返回按钮的图片、标题内容和点击返回按钮时触发的事件,我们需要给组件定义对应的三个属性,使用组件时给组件传参数值。

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

四、代码优化

  • 使用媒体资源。

把图片文件加入媒体资源目录resources >> base >> media,代码中不再使用图片的相对路径引用图片,而是直接使用资源文件 $r('app.media.文件名')。

更多资源与访问,请参考官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/resource-categories-and-access-V5

  • 使用float.json文件

在资源文件float.json中自定义常用的数值,比如字体大小、元素的宽高、间距等。这些数值可以用于多个页面中的多个元素,避免重复定义。注意:这些数值不带单位,默认是px。

鸿蒙一开多端的特性,需要适配不同设备尺寸,需要进行px与fp、vp单位之间的转换,封装了一个公共类SizeUtil。可参考我的帖子:https://developer.huawei.com/consumer/cn/forum/topic/0208151714177357329?fid=0101587866109860105

优化后的代码如下:

TitleContainer.ets文件

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"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JZ2440开发板——S3C2440的时钟体系

参考博客 (1)S3C2440-裸机篇-05 | S3C2440时钟体系详解(FCLK、PCLK、HCLK) 一、三种时钟(FCLK、HCLK、PCLK) 如下图所示,S3C2440的时钟控制逻辑,给整个芯片提供三种时钟&#xff1…

通过防火墙分段增强网络安全

什么是网络分段‌ 随着组织规模的扩大,管理一个不断扩大的网络成为一件棘手的事情,同时确保安全性、合规性、性能和不间断的运行可能是一项艰巨的任务。为了克服这一挑战,网络管理员部署了网络分段,这是一种将网络划分为更小且易…

QT::QComboBox自定义左击事件信号

因为QComboBox没有自定义的clink信号&#xff0c;所以自己新建一个MyComBox类继承QComboBox&#xff0c;并且添加自定义的左击信号&#xff0c;以及使用该信号连接一个槽函数 mycombobox.h #ifndef MYCOMBOBOX_H #define MYCOMBOBOX_H#include <QComboBox> #include &l…

使用程序集解析的方式内嵌dll到exe中

选择一个项目&#xff08;demo3&#xff09;&#xff0c;来进行内嵌。正常dll文件是可以在Bin–Debug里面看到的。 在Program里面添加内容 Program.cs里的全部代码 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Syste…

【面试八股总结】Redis持久化

Redis 实现了数据持久化的机制&#xff0c;这个机制会把数据存储到磁盘&#xff0c;这样在 Redis 重启就能够从磁盘中恢复原有的数据。 Redis 共有三种数据持久化的⽅式&#xff1a; AOF 日志&#xff1a;每执行一条写操作命令&#xff0c;就把该命令以追加的方式写入到⼀个文…

7.5图像缩放

实验原理 在OpenCV&#xff08;Open Source Computer Vision Library&#xff09;中&#xff0c;resize函数用于调整图像的尺寸。这个函数非常有用&#xff0c;尤其是在进行图像预处理时&#xff0c;比如在图像识别或机器学习任务中需要统一输入图像的大小。 下面是基于C的re…

Qt与Udp

(1)绑定端口 (2)广播 用udp实现广播通信_udp广播-CSDN博客 数据的发送是面向整个子网的&#xff0c;任何一台在子网中的计算机都可以接收到相同的数据。 如果一台机器希望向其他N台机器发送信息&#xff0c;这时候可以使用UDP的广播。 --------------- 广播地址&#xff1…

大数据-133 - ClickHouse 基础概述 全面了解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

如何编译OpenHarmony SDK API

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 startup子系统之syspara_lite系统属性部件 &#xff08;1&#xff09; startup子系统之syspara_lite系统属性部件 &#xff08;2&#xff09; startup子系…

【数据集】城市不透水面数据集CLUD-Urban

城市不透水面数据集CLUD-Urban 数据概述数据下载参考 数据概述 1、论文-ESSD-A 30 m resolution dataset of China’s urban impervious surface area and green space, 2000–2018 空间分辨率&#xff1a;30 m 数据下载 数据下载&#xff1a;A 30-meter resolution data…

Grafana面板-linux主机详情(使用标签过滤主机监控)

1. 采集器添加labels标签区分业务项目 targets添加labels &#xff08;模板中使用的project标签&#xff09; … targets: [‘xxxx:9100’] labels: project: app2targets: [‘xxxx:9100’] labels: project: app1 … 2. grafana面板套用 21902 模板 演示

航空航司reese84逆向

reese84逆向 Reese84 是一种用于保护网站防止自动化爬虫抓取的防护机制&#xff0c;尤其是在航空公司网站等需要严格保护数据的平台上广泛使用。这种机制通过复杂的指纹识别和行为分析技术来检测和阻止非人类的互动。例如&#xff0c;Reese84 可以通过分析访问者的浏览器指纹、…

软件开发人员的真实面

我相信我们都看过视频上那些名为“软件工程师的一天”的视频。这些视频通常只展示一些日常任务&#xff0c;比如吃饭、打字和参加会议。我对这些视频未能展示软件开发工作的真实内容感到失望。这些内容往往只关注表面活动&#xff0c;却忽略了工作中的思维挑战和解决问题的部分…

新升级|优化航拍/倾斜模型好消息,支持处理多套贴图模型!

【天元轻量化软件】一直在不断地追求进步和完善&#xff0c;以满足更多用户的各种需求。 电脑登录天元官网免费体验&#xff1a;天元轻量化软件官网 本次我们对“智能PBR”功能进行了更新。更新后的“智能PBR”支持带多套贴图的模型进行使用。 本轮更新后&#xff0c;主要受益…

CISP-PTE CMS sqlgun靶场

sql靶场有个搜索框先点一下go&#xff0c;有回显说明存在漏洞 有个xss 然后在这里尝试sql注入 输入 -1 union select 1,2,3# 有回显可以查看数据库 然后查询数据库&#xff0c;用户 查询数据库的表名 查询它的数据这里admin用户的密码是md5加密 去解密看看 然后扫描ip目录发…

linux-L5.linux查看应用占用的资源top

启动 top 命令&#xff1a; 打开终端&#xff0c;输入 top 并按回车键。 查看进程信息&#xff1a; 默认情况下&#xff0c;top 会显示系统的整体资源使用情况&#xff0c;包括 CPU、内存、磁盘 I/O 和网络 I/O 等信息。然后它会列出当前运行的进程&#xff0c;以及它们分别占…

Leetcode面试经典150题-138.随机链表的复制

题目比较简单&#xff0c;重点是理解思想&#xff0c;random不管&#xff0c;copy一定要放在next 而且里面的遍历过程不能省略 解法都在代码里&#xff0c;不懂就留言或者私信 /* // Definition for a Node. class Node {int val;Node next;Node random;public Node(int val…

【脑机接口】脑机接口性能的电压波形的尖峰分类和阈值比较

Comparison of spike sorting and thresholding of voltage waveforms for intracortical brain–machine interface performance 脑机接口性能的电压波形的尖峰分类和阈值比较论文下载&#xff1a;摘要1 介绍2 方法2.1数据获取2.2spike sorting 技术2.3神经数据分析 3结果3.1神…

【机器学习】线性动态系统的基本概念以及卡尔曼滤波器的概念和应用方式

引言 线性动态系统&#xff08;Linear Dynamical System&#xff0c;LDS&#xff09;是一类特殊的动态系统&#xff0c;其中系统的状态转移和观测过程都是线性的 文章目录 引言一、线性动态系统1.1 LDS的基本组成1.2 LDS的数学表示1.2.1 状态方程1.2.2 观测方程LDS的应用 1.3 L…

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名&#xff1a;/$ $表示普通用户&#xff0c;#表示root用户 2、Linux不分盘&#xff0c;都是绝对路径 /表示根目录&#xff0c;表示计算机文件夹下 ~是当前用户的家&#xff0c;表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…