当前位置: 首页 > news >正文

HarmonyOS UI 开发

引言

HarmonyOS 提供了强大的 UI 开发工具和组件,使开发者能够创建吸引人的用户界面。本章将详细介绍在 HarmonyOS 中应用 JS、CSS、HTML,HarmonyOS 的 UI 组件以及如何自定义 UI 组件。

目录

  1. JS、CSS、HTML 在 HarmonyOS 中的应用
  2. HarmonyOS 的 UI 组件
  3. 自定义 UI 组件
  4. 总结

1. JS、CSS、HTML 在 HarmonyOS 中的应用

当在 HarmonyOS 中进行应用开发时,你可以使用 JavaScript(JS)、CSS 和 HTML 来构建用户界面和处理应用的逻辑。以下是关于在 HarmonyOS 中使用这些技术的详细讲解:

1. JavaScript(JS)的应用

JavaScript 是一种常用的脚本语言,它在 HarmonyOS 中用于处理应用的逻辑和交互。以下是在 HarmonyOS 中使用 JavaScript 的一些关键方面:

  • 事件处理: 你可以使用 JavaScript 来添加事件处理程序,例如点击按钮时触发的事件。通过监听用户的交互动作,你可以执行相应的操作,例如更改界面内容、发送网络请求等。
// 示例:当按钮被点击时,弹出提示框
button.addEventListener("click", function() {console.log("按钮被点击了!");
});
  • 数据操作: JavaScript 可以用于处理数据,包括存储、检索和更新数据。你可以使用 JavaScript 来创建数据模型,以便应用能够动态显示和管理数据。
// 示例:创建一个包含用户信息的数据模型
var user = {name: "John",age: 30,email: "john@example.com"
};
  • DOM 操作: JavaScript 可以访问和操作文档对象模型(DOM),从而改变用户界面。你可以使用 JavaScript 来动态创建、修改或删除页面元素,以实现交互性和动态性。
// 示例:通过 JavaScript 向页面添加新元素
var newElement = document.createElement("div");
newElement.textContent = "这是新的内容";
document.body.appendChild(newElement);

2. CSS 的应用

层叠样式表(CSS)用于定义应用的样式和布局。在 HarmonyOS 中,CSS 用于设置用户界面的外观和样式。以下是在 HarmonyOS 中使用 CSS 的一些关键方面:

  • 样式定义: 你可以使用 CSS 来定义页面元素的样式,包括文本颜色、背景颜色、字体大小、边框样式等。通过为元素应用不同的 CSS 样式,你可以创建各种各样的界面效果。
/* 示例:定义按钮的样式 */
button {background-color: #008CBA;color: white;padding: 10px 20px;border: none;cursor: pointer;
}
  • 布局控制: CSS 也用于控制页面布局,包括元素的位置、对齐方式和大小。你可以使用 CSS 布局属性来确保界面元素按照你的设计排列。
/* 示例:定义文本框的位置和大小 */
input[type="text"] {width: 200px;height: 30px;margin: 10px;
}

3. HTML 的应用

超文本标记语言(HTML)用于构建应用的用户界面结构。在 HarmonyOS 中,HTML 用于定义页面的结构和内容。以下是在 HarmonyOS 中使用 HTML 的一些关键方面:

  • 元素定义: 你可以使用 HTML 标记来定义页面元素,如标题、段落、图像、按钮等。这些标记告诉浏览器如何渲染页面内容。
<!-- 示例:定义一个按钮 -->
<button id="myButton">点击我</button>
  • 嵌套结构: HTML 允许你嵌套元素,以创建复杂的页面结构。你可以使用标签嵌套来构建层次化的界面。
<!-- 示例:嵌套元素创建复杂结构 -->
<div><h1>这是标题</h1><p>这是段落文本。</p>
</div>
  • 属性设置: HTML 允许你为元素添加属性,以提供更多信息或控制元素的行为。例如,你可以使用 id 属性为元素提供唯一标识。
<!-- 示例:设置元素的唯一标识 -->
<button id="myButton">点击我</button>

综上所述,JavaScript、CSS 和 HTML 在 HarmonyOS 中的应用分别用于处理逻辑、设置样式和构建界面结构。它们的组合使你能够创建功能强大、外观吸引人的 HarmonyOS 应用。要确保它们正确引用和使用,以便应用能够正常运行。

2. HarmonyOS 的 UI 组件

HarmonyOS 提供了丰富的预置 UI 组件,这些组件用于构建用户界面,从简单的按钮到复杂的列表视图,都能满足不同应用的需求。下面详细讲解 HarmonyOS 的一些常用 UI 组件及其用法:

1. 文本框(Text)

文本框用于显示和输入文本内容。你可以在文本框中显示静态文本,也可以允许用户在其中输入文本。

用法示例:

<text value="这是一个文本框"></text>
<input type="text" placeholder="请输入文本">

2. 按钮(Button)

按钮用于触发事件,如点击按钮执行特定操作。你可以定义按钮的文本和样式。

用法示例:

<button>点击我</button>

3. 图像视图(Image)

图像视图用于显示图像。你可以指定图像的路径或 URL,并设置图像的尺寸和样式。

用法示例:

<image src="image.jpg" width="100" height="100"></image>

4. 列表视图(ListView)

列表视图用于显示具有滚动功能的列表。你可以添加多个列表项,并支持上下滚动。

用法示例:

<list-view><list-item>第一项</list-item><list-item>第二项</list-item><list-item>第三项</list-item>
</list-view>

5. 滚动视图(ScrollView)

滚动视图允许你在有限的空间内滚动显示大量内容。它通常包含一个视图容器,其中包含滚动的内容。

用法示例:

<scroll-view><!-- 这里放置需要滚动的内容 -->
</scroll-view>

6. 进度条(ProgressBar)

进度条用于显示任务的进度,通常用于长时间运行的操作。

用法示例:

<progress-bar value="50"></progress-bar>

7. 选择器(Picker)

选择器允许用户从预定义的选项中进行选择,常用于选择日期、时间、列表项等。

用法示例:

<picker><picker-item>选项1</picker-item><picker-item>选项2</picker-item><picker-item>选项3</picker-item>
</picker>

8. 开关(Switch)

开关用于切换一个二进制的开启和关闭状态,通常用于控制应用的某些功能。

用法示例:

<switch checked="true"></switch>

9. 对话框(Dialog)

对话框用于显示消息、警告或需要用户确认的信息。你可以自定义对话框的内容和按钮。

用法示例:

<dialog title="提示" message="确认删除这条记录吗?"><button>确认</button><button>取消</button>
</dialog>

10. 标签页(TabLayout)

标签页用于切换应用不同部分或视图之间。每个标签页通常关联一个不同的内容区域。

用法示例:

<tab-layout><tab title="标签1"><!-- 内容1 --></tab><tab title="标签2"><!-- 内容2 --></tab>
</tab-layout>

以上是 HarmonyOS 中一些常用的 UI 组件及其用法示例。这些组件可以根据应用的需求进行自定义和扩展,以创建各种各样的用户界面。你可以根据具体的项目需求选择合适的组件,然后使用 HTML、CSS 和 JavaScript 进行进一步的定制和交互。

3. 自定义 UI 组件

在 HarmonyOS 中,你可以自定义 UI 组件以满足特定的应用需求。自定义 UI 组件允许你创建自己的界面元素,这些元素可以包含特定的样式、行为和功能。以下是如何自定义 UI 组件的详细讲解:

1. 创建自定义 UI 组件

创建自定义 UI 组件通常包括以下步骤:

  • 定义 HTML 结构: 首先,定义组件的 HTML 结构。这包括使用 HTML 标记和元素来描述组件的外观和布局。
<div class="custom-component"><p>This is a custom component</p><button>Click Me</button>
</div>
  • 应用 CSS 样式: 使用 CSS 来为组件定义样式,包括颜色、字体、边框等。

css
Copy code
.custom-component {
background-color: #f0f0f0;
padding: 10px;
border: 1px solid #ccc;
}

  • 编写 JavaScript 逻辑: 使用 JavaScript 来添加组件的交互行为和逻辑。这可以包括事件处理、数据操作等。
// 添加点击事件处理程序
var button = document.querySelector('.custom-component button');
button.addEventListener('click', function() {alert('Button clicked');
});

2. 组件生命周期

自定义 UI 组件可以有自己的生命周期,包括创建、更新和销毁阶段。这些生命周期方法允许你在组件不同状态下执行特定的操作。

以下是一些常见的生命周期方法:

  • created: 组件创建时触发,通常用于初始化组件的状态和属性。
customComponent.created = function() {// 初始化组件状态this.counter = 0;
};
  • updated: 组件属性或状态更新时触发,用于处理更新后的操作。
customComponent.updated = function() {// 处理组件更新this.updateCounterDisplay();
};
  • destroyed: 组件销毁时触发,用于清理资源和取消事件监听器。
customComponent.destroyed = function() {// 清理资源this.cleanup();
};

3. 组件通信

自定义 UI 组件可以与其他组件和应用进行通信。这通常通过自定义事件和消息机制来实现。

  • 自定义事件: 你可以定义自己的事件,然后在组件内触发和监听这些事件。
// 定义自定义事件
var customEvent = new CustomEvent('customEventName', {detail: {message: 'Custom event message'}
});// 在组件内触发事件
this.dispatchEvent(customEvent);// 在组件外监听事件
customComponent.addEventListener('customEventName', function(event) {console.log(event.detail.message);
});
  • 消息通信: 组件之间还可以通过消息传递数据和信息。
// 发送消息
ohos.aafwk.content.Want want = new ohos.aafwk.content.Want();
want.setParam("message", "Hello from custom component");
commonEventManager.publishCommonEvent(want);// 接收消息
commonEventManager.subscribeCommonEvent(commonEventSubscriber);

以上是自定义 UI 组件的基本概念和用法。通过自定义 UI 组件,你可以创建符合特定需求的界面元素,扩展 HarmonyOS 应用的功能和交互。确保在组件中合理地管理生命周期和通信,以实现更复杂的应用场景。

4. 总结

本章详细介绍了在 HarmonyOS 中应用 JS、CSS、HTML,HarmonyOS 的 UI 组件以及如何自定义 UI 组件。这些工具和技术将帮助你创建强大的用户界面和交互体验。

相关文章:

HarmonyOS UI 开发

引言 HarmonyOS 提供了强大的 UI 开发工具和组件&#xff0c;使开发者能够创建吸引人的用户界面。本章将详细介绍在 HarmonyOS 中应用 JS、CSS、HTML&#xff0c;HarmonyOS 的 UI 组件以及如何自定义 UI 组件。 目录 JS、CSS、HTML 在 HarmonyOS 中的应用HarmonyOS 的 UI 组…...

中国移动发布《新型智慧城市白皮书》(2023版)

加gzh“大数据食铁兽”&#xff0c;回“20231101”&#xff0c;获取材料完整版 导读 通过本系列白皮书&#xff0c;我们系统的阐述了中国移动对中国智慧城市发展趋势&#xff0c;并对中国移动服务智慧城市建设六大核心能力进行了介绍&#xff0c;详细说明了中国移动智慧城市…...

windows和docker环境下springboot整合gdal3.x

链接: gdal官网地址 gdal gdal的一个用c语言编写的库&#xff0c;用于处理地理信息相关的数据包括转换&#xff0c;识别数据&#xff0c;格式化数据以及解析 同时提供第三方语言的SDK包括python&#xff0c;java上述需要编译后使用 java是需要使用jni接口调用实现方法在wind…...

大数据与健康:技术助力医疗卫生事业腾飞

大数据与健康&#xff1a;技术助力医疗卫生事业腾飞 随着科技的飞速发展&#xff0c;大数据技术已经渗透到我们生活的方方面面&#xff0c;包括医疗卫生领域。本文将对大数据在健康医疗领域的应用进行分析&#xff0c;并通过数据图表展示其发展趋势和前景。 一、背景介绍 近…...

《巴渝小将》少儿电视综艺走进江小白金色黄庄拍摄圆满成功!

巴渝小将&#xff0c;乘风破浪&#xff01; 张扬巴渝魅力&#xff0c;展示少年风采&#xff0c;本期拍摄我们来到了位于江津的江小白金色黄庄。 江小白金色黄庄位于永兴镇黄庄村&#xff0c;是一座充满诗意又不乏童趣的农文旅综合体&#xff0c;基于当地良好的酿酒高粱产业基础…...

【uniapp】顶部和底部导航栏无法正常显示

关于顶部导航栏不显示的问题&#xff1a; 顶部导航栏在配置了 navigationBarTitleText 还是无法显示&#xff0c;如果是使用他人的项目结构&#xff0c;需要检查是否已经被配置了自定义导航栏&#xff1a; "navigationStyle": "custom" "globalStyle&…...

【ArcGIS模型构建器】06:ArcGIS中DOM批量分幅教程

ArcGIS中利用模型构建器实现DOM批量分幅裁剪。 文章目录 1. 加载数据2. 批量分幅1. 加载数据 批量分幅通常是基于数字正射影像来实现。 数字正射影像(DOM.tif)CASS标准图幅(shp) 2. 批量分幅 单个图幅可以通过裁剪或者按掩膜提取工具来进行,批量分幅采用模型构建器进行。…...

uniapp 设置 editor 默认值

dom 元素长这样 <editor id"editor" value12323 class"ql-container container" placeholder"开始输入..." ready"onEditorReady" blur"submit"></editor> 注意赋值必须要用 data 里面变量数据 不要let 定义…...

动态规划:计数类DP

整数划分&#xff1a; 二维做法&#xff1a; #include <iostream>using namespace std;const int N 1e3 7, mod 1e9 7;int f[N][N];int main() {int n;scanf("%d",&n);//总数为0时&#xff0c;前i个数字全不选也是一种方案&#xff0c;但某个数字不…...

Arcmap制图绘制显著性区域

类似于下图这种&#xff0c;为分析结果添加显著性区域&#xff0c;该如何实现呢&#xff1f; 实现方式多种多样&#xff0c;比如&#xff1a; 1、代码。Python、R、Matlab都有实现方式&#xff0c;但是绘制一幅优美的地图&#xff0c;用代码绘制&#xff0c;需要添加很多控制语…...

你一般会什么时候使用CHATGPT?

在当今数字时代&#xff0c;人们对于人工智能&#xff08;AI&#xff09;的依赖程度日益增加&#xff0c;而ChatGPT作为一种强大的自然语言处理工具&#xff0c;吸引了人们的广泛关注和应用。那么&#xff0c;人一般在什么时候会想要使用ChatGPT呢&#xff1f;这个问题涵盖了多…...

单例模式下双重校验锁 DCL 的灵魂三问

文章目录 前言如何实现一个双重校验锁 DCL定义一个单例变量定义一个获取单例的方法性能优化性能优化带来的一点点问题什么是指令重排&#xff1f; 总结如何理解文章开篇理解的三个问题1、为什么需要使用两个 if 语句&#xff1f;2、为什么使用了 synchronized 关键字还需要使用…...

oracle中关于connect by的语法及实现(前序遍历树)

语法 connect by是是结构化查询中用到的&#xff0c;其基本语法是&#xff1a; 1 select … from tablename 2 start with 条件1 3 connect by 条件2 4 where 条件3; 使用示例 例&#xff1a; create table tree(id int,parentid int); insert into tree values(120,184); …...

学习笔记二十七:K8S控制器Statefulset入门到企业实战应用

这里写目录标题 Statefulset控制器&#xff1a;概念、原理解读Statefulset资源清单文件编写技巧查看定义Statefulset资源需要的字段查看statefulset.spec字段如何定义&#xff1f;查看statefulset的spec.template字段如何定义 Statefulset使用案例&#xff1a;部署web站点State…...

JavaScript 的 闭包

在 JavaScript 中&#xff0c;闭包是一种强大的特性&#xff0c;它允许函数在结束执行后&#xff0c;仍能访问并控制其外部的局部变量。这种特性在许多高级 JavaScript 编程场景中都发挥着关键作用&#xff0c;如创建函数工厂、实现数据隐藏和封装等。 1、闭包的原理 JavaScri…...

二蛋赠书六期:《Linux管理入门经典(第8版)》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…...

19.10 Boost Asio 同步文件传输

在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法&#xff0c;本节我们将采用另一种传输方式&#xff0c;我们通过判断字符串是否包含goodbye lyshark关键词来验证文件是否传输结束了&#xff0c;当然了这种传输方式明显没有根据长度传输严谨&#xff0c;但使用这…...

微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)

效果 代码分析 外层循环 外层循环的框架 <view wx:for"{{info}}" wx:key"index"></view> wx:for"{{info}}"&#xff1a;这里wx:for指令用于指定要遍历的数据源&#xff0c;即info数组。当遍历开始时&#xff0c;会依次将数组中的每…...

输入几个数,分别输出其中的奇数和偶数

这个问题我们只需要设计几个循环嵌套在一起就可以解决&#xff0c;话不多说&#xff0c;我们直接上代码 目录 1.运行代码 2.运行结果 1.运行代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h>int main() {int arr[10] {1,2,3,4,5,6,…...

香港Web3.0:从政策到实践,探索未来发展路径

随着互联网技术的快速发展&#xff0c;互联网正在经历从Web1.0到Web3.0的重大升级。在这场互联网新技术革命的浪潮中&#xff0c;谁能抓住机遇&#xff0c;谁就能成为未来的引领者。 2022年11月&#xff0c;香港政府发布了《有关香港虚拟资产发展的政策宣言》&#xff0c;彰显…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...