【HarmonyOS】HarmonyOS NEXT学习日记:一、创建和运行一个页面

news2024/12/23 8:57:51

【HarmonyOS】HarmonyOS NEXT学习日记:一

DevEco Studio下载与安装

直接到官网的下载地址下载即可
在这里插入图片描述
正常下载、解压、安装完成后
在这里插入图片描述

正常来说不会有项目,并且是英文界面。

需要汉化的话可以按照下面的步骤设置插件
选择customize里的 all setting 进入设置页面
在这里插入图片描述
进入plugins插件页面、进入installed已安装、然后搜索chinese找到汉化插件后选用enable启用,之后重启就实现汉化了。
在这里插入图片描述

构建一个应用

新建工程

新建项目->创建一个Empty Ability->啥都不用改直接finish
在这里插入图片描述

在这里插入图片描述
即可成功创建出一个空白项目
在这里插入图片描述

运行

按照下图设置一preview
在这里插入图片描述
然后点击播放键,选择一个设备和分辨率,我这里选的是手机。
在这里插入图片描述
即可在模拟器查看页面
在这里插入图片描述

修改页面

目录结构

现在页面也能运行了,下一步当然是想要尝试着修改他一下。首先看看项目目录结构。

我以前没有进行过安卓开发这个项目的目录结构十分陌生,我不打算一次性吃透。就这一次的修改页面而言,我着重理解了以下目录结构。
在这里插入图片描述
以下是官方给出的其它目录结构的意义:

  • AppScope > app.json5:应用的全局配置信息,详见app.json5配置文件。

  • entry:HarmonyOS工程模块,编译构建生成一个HAP包。

  • src > main > ets:用于存放ArkTS源码。

  • src > main > ets > entryability:应用/服务的入口。

  • src > main > ets > entrybackupability:应用提供扩展的备份恢复能力。

  • src > main > ets > pages:应用/服务包含的页面。

  • src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。关于资源文件,详见资源分类与访问。

  • src > main > module.json5:模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明,详见module.json5配置文件。

  • build-profile.json5:当前的模块信息 、编译信息配置项,包括buildOption、targets配置等。

  • hvigorfile.ts:模块级编译构建任务脚本。

  • obfuscation-rules.txt:混淆规则文件。混淆开启后,在使用Release模式进行编译时,会对代码进行编译、混淆及压缩处理,保护代码资产。详见开启代码混淆。

  • oh-package.json5:用来描述包名、版本、入口文件(类型声明文件)和依赖项等信息。

  • oh_modules:用于存放三方库依赖信息。

  • build-profile.json5:工程级配置信息,包括签名signingConfigs、产品配置products等。其中products中可配置当前运行环境,默认为HarmonyOS。

  • hvigorfile.ts:工程级编译构建任务脚本。

  • oh-package.json5:主要用来描述全局配置,如:依赖覆盖(overrides)、依赖关系重写(overrideDependencyMap)和参数化配置(parameterFile)等。

修改index

参考官方教程修改index.ets代码如下,并添加了每一行的解析

// 导入页面路由模块
import { router } from '@kit.ArkUI';
// 导入业务错误处理模块
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index { // 定义一个名为 Index 的组件
  @State message: string = 'Hello World' // 定义一个状态变量 message,并初始化为 'Hello World'

  build() { // 构建页面结构
    Row() { // 使用 Row 布局组件
      Column() { // 在 Row 中使用 Column 布局组件
        Text(this.message) // 显示状态变量 message 的值
          .fontSize(50) // 设置字体大小为 50
          .fontWeight(FontWeight.Bold) // 设置字体粗细为粗体
        // 添加按钮,以响应用户点击
        Button() { // 定义一个按钮组件
          Text('Next') // 按钮上的文本为 'Next'
            .fontSize(30) // 设置按钮文本的字体大小为 30
            .fontWeight(FontWeight.Bold) // 设置按钮文本的字体粗细为粗体
        }
        .type(ButtonType.Capsule) // 设置按钮类型为胶囊型
        .margin({
          top: 20 // 设置按钮的上边距为 20
        })
        .backgroundColor('#0D9FFB') // 设置按钮的背景颜色为蓝色
        .width('40%') // 设置按钮的宽度为其父容器宽度的 40%
        .height('5%') // 设置按钮的高度为其父容器高度的 5%
        // 跳转按钮绑定 onClick 事件,点击时跳转到第二页
        .onClick(() => { // 定义按钮的点击事件
          console.info(`Succeeded in clicking the 'Next' button.`) // 在控制台输出点击成功的日志信息
          // 跳转到第二页
          router.pushUrl({ url: 'pages/Second' }).then(() => { // 调用 router 模块的 pushUrl 方法跳转到第二页
            console.info('Succeeded in jumping to the second page.') // 在控制台输出跳转成功的日志信息
          }).catch((err: BusinessError) => { // 捕捉跳转过程中的错误
            console.error(`Failed to jump to the second page. Code is ${err.code}, message is ${err.message}`) // 在控制台输出跳转失败的错误信息,包括错误代码和错误信息
          })
        })
      }
      .width('100%') // 设置 Column 的宽度为其父容器的 100%
    }
    .height('100%') // 设置 Row 的高度为其父容器的 100%
  }
}

区别和html+js+css的那一套差别很大,用的是声明式UI,并且有自己的一套ArkUI用来布局。已经可以预见后面逃不过相关的学习了,先放一个文档在这里:ArkUI文档

先不深入的学习,通过下面的图能够大概知道这段代码在干什么就行
在这里插入图片描述

添加第二个页面、以及路由

再接着添加第二个页面Second.ets,文件位置与Index.ets同级
在这里插入图片描述

// Second.ets
// 导入页面路由模块
import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Second {
  @State message: string = 'Hi there'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button() {
          Text('Back')
            .fontSize(25)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#0D9FFB')
        .width('40%')
        .height('5%')
        // 返回按钮绑定onClick事件,点击按钮时返回到第一页
        .onClick(() => {
          console.info(`Succeeded in clicking the 'Back' button.`)
          try {
            // 返回第一页
            router.back()
            console.info('Succeeded in returning to the first page.')
          } catch (err) {
            let code = (err as BusinessError).code;
            let message = (err as BusinessError).message;
            console.error(`Failed to return to the first page. Code is ${code}, message is ${message}`)
          }
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

添加第二个页面后要记得添加路由,个人感觉操作类似于在小程序开发中的添加路由。
在这里插入图片描述
ok,重新跑一下,即可体验新的点击按钮,跳转页面的功能。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

在 electron+vite+vue3+express 项目中使用better-sqlite3

文章目录 一、安装 electron-rebuild 和 better-sqlite3二、使用 electron-rebuild 重建 Node.js 模块三、better-sqlite3 的基本使用四、打包五、参考资料 一、安装 electron-rebuild 和 better-sqlite3 yarn add -D electron-rebuild yarn add better-sqlite3Electron 内置的…

【Android安全】Ubuntu 下载、编译 、刷入Android-8.1.0_r1

0. 环境准备 Ubuntu 16.04 LTS(预留至少95GB磁盘空间,实测占94.2GB) Pixel 2 XL 要买欧版的,不要美版的。 欧版能解锁BootLoader、能刷机。 美版IMEI里一般带“v”或者"version",这样不能解锁BootLoader、…

Pycharm与Gitlab交互

环境准备 1、下载配置好本地Git 2、配置Pycharm上的Git 3、gitlab账号 Gitlab配置 Gitlab配置中文 账号》设置》偏好设置》简体中文 创建项目 命令行操作 打开项目会展示以下步骤 在pycharm克隆gitlab的项目 通过菜单栏 1、在PyCharm的顶部菜单栏中,选择“V…

uniapp字符串转base64,无需导入依赖(多端支持)

使用示例 import { Base64Encode, Base64Decode } from "@/utils/base64.js" base64.js const _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";export const Base64Encode = (text)

鸿蒙基本工程目录

工程级目录 AppScope 中存放应用全局所需要的资源文件。entry 是应用的主模块,存放 HarmonyOS 应用的代码、资源等。oh_modules 是工程的依赖包,存放工程依赖的源文件。build-profile.json5 是工程级配置信息,包括签名、产品配置等。hvigorf…

uniapp-vue3-vite 搭建小程序、H5 项目模板

uniapp-vue3-vite 搭建小程序、H5 项目模板 特色准备拉取默认UniApp模板安装依赖启动项目测试结果 配置自动化导入安装依赖在vite.config.js中配置 引入 prerttier eslint stylelint.editorconfig.prettierrc.cjs.eslintrc.cjs.stylelintrc.cjs 引入 husky lint-staged com…

《0基础》学习Python——第十一讲

一、lambda 匿名函数 lambda函数是一种匿名函数。它是一种快速定义单行函数的方法。与常规函数不同,lambda函数没有名称,也没有使用def关键字来定义。lambda函数通常用于一些简单的函数,可以在代码中快速定义和使用,而不需要为其定…

推荐系统:从协同过滤到深度学习

目录 一、协同过滤(Collaborative Filtering, CF)1. 基于用户的协同过滤2. 基于物品的协同过滤 二、深度学习在推荐系统中的应用1. 深度学习模型的优势2. 深度学习在推荐系统中的应用实例 三、总结与展望 推荐系统是现代信息处理和传播中不可或缺的技术&…

异常检测算法

目录 一、异常检测算法功能:二、正态(高斯)分布:三、异常检测算法执行过程:四、如何选择特征:五、评估异常检测算法: 一、异常检测算法功能: 异常检测算法用来检测数据集中的一些异…

VsCode 与远程服务器 ssh免密登录

首先配置信息 加入下列信息 Host qb-zn HostName 8.1xxx.2xx.3xx User root ForwardAgent yes Port 22 IdentityFile ~/.ssh/id_rsa 找到自己的公钥,不带pub是私钥,打死都不能给别人。复制公钥 拿到公钥后,来到远程服务器 vim ~/.ss…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之④:数据分析之三(数据展示)

概述 在先前探讨的文章中,我们构建了一个全面的数据测试体系,该体系遵循“数据获取—数据治理—数据分析”的流程。如何高效地构建数据可视化看板,以直观展现分析结果,正逐渐成为利用新兴技术提升效能的关键领域。伴随业务拓展、数…

前端路由手写Hash和History两种模式

文章目录 1. Hash模式:简洁而广泛适用2. History模式:更自然的用户体验3. 结论 在现代Web开发中,单页面应用(Single Page Application,简称SPA)因其流畅的用户体验和高效的页面交互能力而备受青睐。前端路由…

C#学习3-微软C#官方文档Microsoft-dotnet-csharp.pdf

文章目录 1.内插表达式的字段宽度和对齐方式 1.内插表达式的字段宽度和对齐方式 static void Main(string[] args) {var titles new Dictionary<string, string>() {["Doyle ,Arthur"] "Hound of the Basker,The",["Lodon ,Jack"] &quo…

数电基础 - 触发器

目录 ​编辑 一. 简介 二. SR锁存器 三. JK 触发器 四. D 触发器 五. 电平触发的触发器 六. 脉冲触发的触发器 七. 边沿触发的触发器 八 . 触发器的逻辑功能和描述方法 一. 简介 触发器是数字电路中的一种基本存储单元&#xff0c;具有记忆功能&#xff0c;能够存储一…

记录些MySQL题集(3)

MySQL 分区技术深入解析 分区的基本概念 MySQL分区 是一种数据库优化的技术&#xff0c;它允许将一个大的表、索引或其子集分割成多个较小的、更易于管理的片段&#xff0c;这些片段称为“分区”。每个分区都可以独立于其他分区进行存储、备份、索引和其他操作。这种技术主要…

【常见开源库的二次开发】基于openssl的加密与解密——Base58比特币钱包地址——算法分析(三)

目录&#xff1a; 目录&#xff1a; 一、base58(58进制) 1.1 什么是base58&#xff1f; 1.2 辗转相除法 1.3 base58输出字节数&#xff1a; 二、源码分析&#xff1a; 2.1源代码&#xff1a; 2.2 算法思路介绍&#xff1a; 2.2.1 Base58编码过程&#xff1a; 2.1.2 Base58解码过…

网络安全 DVWA通关指南 DVWA Brute Force (爆破)

DVWA Brute Force (爆破) 文章目录 DVWA Brute Force (爆破)LowMediumHighImpossible Low 1、分析网页源代码 <?php// 检查是否存在"Login" GET 参数&#xff0c;这通常是提交登录表单后触发的动作 if( isset( $_GET[ Login ] ) ) {// 获取POST方式提交的用户名…

SpringCloud | 单体商城项目拆分(微服务)

为什么要进行微服务拆分&#xff1f; 在平常的商城项目中&#xff0c;我们一般的项目结构模块都是将各种业务放在同一个项目文件夹&#xff0c;比如像&#xff1a; 用户&#xff0c;购物车&#xff0c;商品&#xff0c;订单&#xff0c;支付等业务都是放在一起&#xff0c;这样…

无人机航电系统技术详解

一、系统概述 无人机航电系统&#xff08;Avionics System&#xff09;是无人机飞行与任务执行的核心部分&#xff0c;它集成了飞控系统、传感器、导航设备、通信设备等&#xff0c;为无人机提供了必要的飞行控制和任务执行能力。航电系统的设计和性能直接影响到无人机的安全性…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…