鸿蒙开发笔记

news2025/1/10 3:27:46

最近比较火,本身也是做前端的,就抽空学习了下。对前端很友好

原视频地址:黑马b站鸿蒙OS视频

下载安装跟着视频或者文档就可以了。如果你电脑上安装的有node,但是开发工具显示你没安装,不用动咱们的node,直接在开发工具里面点下载安装就行了

测试是否都安装成功,点击help,让后点击第一个,会弹出开发环境是否完整的测试

如果都是对号,则环境没有问题,如果有❌,后面下载对应的即可

设置汉化,跟idea是一样的,安装插件即可,找到setting,点击会弹出面板

在面板中找到plugin,搜索Chinese,然后勾选,点击应用,再点击确定,会弹出让你重进的选项,点击即可

首页

@Entry // 标记当前组件是入口组件
@Component // 标记是自定义组件
struct Index { // 自定义组件:可复用的UI单元
  @State w: number = 100 // @State用来修饰变量,值发生变化会触发ui刷新

  build() { // UI描述:内部以声明方式描述UI结构
    Row() { // 内置组件:布局类,用来控制行
      Column() { // 内置组件:布局类,用来控制列
        Text("你好 鸿蒙") // 内置组件:文本
          .fontColor("#f00") // 样式修改
          .fontWeight(600)
      }
      .width('100%')
    }
    .height('100%')
  }
}

点右面的预览器即可查看效果

组件使用

Image

代码案例

@Entry
@Component
struct Index {
  @State w: number = 30
  @State h: number = 30

  build() {
    Row() {
      Column() {
        Image($r('app.media.icon'))
          .width(this.w)
          .height(this.h)
          .interpolation(ImageInterpolation.High) // 防锯齿
      }
      .width('100%')
    }
    .height('100%')
  }
}

注意:如果我们使用网络照片,就需要开通网络设置。就需要在module.json5文件中配置网络权限

附官网链接:访问控制授权申请

只需要在module.json5文件中加上配置即可

"requestPermissions":[
      {
        "name": "ohos.permission.INTERNET"
      }
    ],

Text

  • 上面的base文件夹中的element文件夹里的string.json文件中,存放的就是后备的内容。如果地区都匹配不上,则就会使用这个里面的
  • 如果能正常匹配到地区,则就会使用匹配到地区里的string.json中声明的内容。

Text中如果使用本地资源,那么就可以做国际化了

例如我们在en_US文件夹中的string.json中写入一个键值对

爆红是因为在默认的里面没有配置对应的键值对

我们在base>>element>>string.json中配置对应的键值对

提示没有在zh_CN>>element>>string.json中配置。我们接着配置

都配置完后,就发现不报红了

然后Text就可以使用本地资源了

页面效果

可以看到内容显示了出来。我们再切换一下美国地区

可以看到,显示的就是en_US中我们配置的内容。用这个来实现国际化,方便了很多

TextInput

就是html中的input

代码案例

@Entry
@Component
struct Index {
  @State w: number = 30

  build() {
    Row() {
      Column() {
        Text($r('app.string.width_label'))
          .fontSize(12)
        TextInput({ placeholder: '请输入图片宽度' })
          .width(200)
          .onChange(val => { // 事件,每次输入值都会触发
            this.w = +val // 通过 加 运算符把字符型转为数字型
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

Button

代码案例

@Entry
@Component
struct Index {
  @State w: number = 30

  build() {
    Row() {
      Column() {
        Button("+")
          .onClick(() => {
            this.w += 10
          })
        Button("-")
          .onClick(() => {
            this.w -= 10
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

Slider

代码案例

@Entry
@Component
struct Index {
  @State w: number = 30

  build() {
    Row() {
      Column() {
        // 图片
        Image($r('app.media.icon'))
          .width(this.w)
          .interpolation(ImageInterpolation.High) // 防锯齿

        // 文本
        Text($r('app.string.width_label'))
          .fontSize(12)
        TextInput({ placeholder: '请输入图片宽度' })
          .width(200)
          .onChange(val => { // 事件,每次输入值都会触发
            this.w = +val // 通过 加 运算符把字符型转为数字型
          })

        // 按钮
        Button("+")
          .onClick(() => {
            this.w += 10
          })
        Button("-")
          .onClick(() => {
            this.w -= 10
          })

        // 滑块
        Slider({
          min: 0,
          max: 200,
          value: this.w,
          step: 20
        }).width('90%')
          .showTips(true)
          .onChange(val => {
            this.w = +val
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

布局

 布局分为行和列,分别对应 Row Column  。行和列都有自己的主轴和测轴(也就是交叉轴)

格式:

Row({ space: xx }) { // ... }        // 行

Column({ space: xx }) { // ... }   // 列

对齐方式

主轴和测轴都有对齐方式,具体的对齐方式跟flex布局的大差不差

主轴对齐方式

justifyContent(FlexAlign.具体的对齐方式)  // Row和Column都一样

测轴对齐方式

alignItems(VerticalAlign.具体的对齐方式)    // 这个是Row的

alignItems(HorizontalAlign.具体的对齐方式)    // 这个是Column的

案例代码

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column({ space: 20 }) {
        Text("item1")
        Text("item2")
        Text("item3")
        Text("item4")
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .alignItems(HorizontalAlign.Center)
    }
    .height('100%')
  }
}

对齐方式图解

主轴(justifyContent)对齐方式(默认start)

  • 行(Row)和列(Column)的主轴都是用的  justifyContent

测轴对齐方式(默认center)

  • 行(Row)的测轴都是用的  VerticalAlign
  • 列(Column)的测轴都是用的  HorizontalAlign

了解基本的布局之后,我们就可以对上面的代码进行改造,让其变的更好看一点

@Entry
@Component
struct Index {
  @State w: number = 30

  build() {
    Row() {
      Column() {
        // 2. 让图片处于一个容器中,不然放大或者缩小都会影响下面的元素
        Row() {
          Image($r('app.media.icon'))
            .width(this.w)
            .interpolation(ImageInterpolation.High) // 防锯齿
        }.width(300)
        .height(300)
        .backgroundColor('#ccc') // 方便看清区域
        .justifyContent(FlexAlign.Center) // 只需要设置主轴即可,测轴默认就是center

        // 3. 让文本和输入框处于一行,且有个上下的外边距
        Row() {
          Text($r('app.string.width_label'))
            .fontSize(12)
          TextInput({ placeholder: '请输入图片宽度', text: this.w + '' })
            .width(200)
            .onChange(val => { // 事件,每次输入值都会触发
              if(+val <= 2000) {
                this.w = +val // 通过 加 运算符把字符型转为数字型
              } else {
                this.w = 200
              }
            })
        }.width('100%')
        .justifyContent(FlexAlign.SpaceAround) // 设置主轴对齐方式
        .margin(10) // 设置外边距

        // 4. 让两个按钮处于一行
        Row() {
          Button("+")
            .onClick(() => {
              this.w += 10
            })
          Button("-")
            .onClick(() => {
              this.w -= 10
            })
        }.width('100%')
        .justifyContent(FlexAlign.SpaceEvenly)
        .margin('0 0 10 0')

        // 滑块
        Slider({
          min: 0,
          max: 200,
          value: this.w,
          step: 20
        }).width('90%')
          .showTips(true)
          .onChange(val => {
            this.w = +val
          })
      }
      .width('100%')
    }
    .height('100%')
    .alignItems(VerticalAlign.Top) // 1. 行需要顶格,设置测轴对齐方式为Top
  }
}

效果如下

循环渲染

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

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

相关文章

高效复习的打印神器,学习好助手工作好搭档,咕咕机T1错题打印机上手

日常工作和学习的时候&#xff0c;经常需要打印很多电子表格和文档&#xff0c;但是手边不一定有打印机&#xff0c;对于在家或宿舍学习的学生来说更是如此&#xff0c;不过市面上常见的打印机需要墨盒、硒鼓等配件&#xff0c;使用成本高且不方便操作。那么有没有一款快捷易用…

智慧箱变监控系统

智慧箱变监控系统是一种先进的监控解决方案&#xff0c;依托电易云-智慧电力物联网&#xff0c;旨在实现对箱式变电站&#xff08;简称“箱变”&#xff09;的智能化、远程化监控和管理。以下是智慧箱变监控系统的主要功能和优势&#xff1a; 实时监测&#xff1a;通过传感器和…

ChatGPT一周年,奥特曼官宣 OpenAI 新动作!

大家好&#xff0c;我是二狗。 今天是11月30日&#xff0c;一转眼&#xff0c;ChatGPT 发布已经一周年了&#xff01; 而就在刚刚&#xff0c;ChatGPT一周年之际。 OpenAI 正式宣布Sam Altman回归重任CEO, Mira Murati 重任CTO&#xff0c;Greg Brockman重任总裁&#xff0c;O…

公共字段自动填充

1.自定义注解&#xff0c;用于表示需要进行公共字段自动填充的方法 OperationType枚举类 自定义切面类 通过反射为属性赋值

XXL-Job详解(三):任务开发

目录 前言任务配置属性任务开发bean模式1、创建任务2、调度中心新建调度任务 GLUE模式1、调度中心&#xff0c;新建调度任务&#xff1a;2、开发任务代码 前言 看该文章之前&#xff0c;最好看一下之前的文章&#xff0c;比较方便我们理解 XXL-Job详解&#xff08;一&#xf…

np.newaxis()函数的使用

import numpy as np x np.array([2, 4, 7, 9, 20]) print(x的形状:, x.shape) # x的形状: (5,) print(x的值:, x) # x的值: [ 2 4 7 9 20]x_new1 x[np.newaxis, :] # (5,) -----》 (1, 5) print(x_new1的形状:, x_new1.shape) # x_new1的形状: (1, 5) print…

【Openstack Train安装】十二、Cinder安装

Cinder在块存储资源和计算服务&#xff08;Nova&#xff09;之间提供了一个抽象层。通过Cinder API&#xff0c;块存储可以被管理&#xff08;创建、销毁和分配等&#xff09;&#xff0c;而不需要知道提供存储的底层资源。 本文介绍Cinder安装步骤&#xff0c;Cinder需在控制节…

Visual Studio通过ClaudiaIDE插件设置背景图片

首先&#xff0c;在VS菜单栏上选择扩展-管理扩展&#xff0c;搜索插件为 ClaudiaIDE&#xff0c; 下载完成之后&#xff0c;关闭VS&#xff0c;点击Modify按钮安装&#xff1a; 等待安装完成&#xff0c;进入 VS , 打开 工具----选项---- ClauDiaIDE 界面 这个是背景色调 我选的…

免费用的 AI 工具 CodeGeeX ,开发效率翻倍!!!

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、AI使用教程 二、工作提效 2.1 AI 导师 2.2 AI 程序助手 2.3 AI 测试员 2.4 AI Bug 修复师 三、其他能力 四、总结 前言…

实现简单的Http服务器+SpringMvc,集成到Spring

实现简单的Http服务器SpringMvc&#xff0c;集成到Spring 1、Http协议 1.1、HTTP 协议请求格式 方法 空格 URL 空格 版本 回车符 换行符头部域名称&#xff1a;头部域值 回车符 换行符...头部域名称&#xff1a;头部域值 回车符 …

次世代建模纹理贴图怎么做?

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是次时代建模&#xff1f; "次世代建模"是一个术语&#xff0c;通常用来描述…

daima8资源网整站数据打包完整代码(集成了ripro9.1主题,开箱即用)

基于ripro9.1完全明文无加密后门版本定制开发&#xff0c;无需独立服务器&#xff0c;虚拟主机也可以完美运营&#xff0c;只要主机支持php和mysql即可。整合了微信登录和几款第三方的主题文件&#xff0c;看起来更美观一些。站长本人就是程序员&#xff0c;所以本站的代码资源…

iceoryx(冰羚)-共享内存分配

iceoryx其实主要分两大部分IceOryxRouDiMemoryManager&#xff0c; PortManager。IceOryxRouDiMemoryManager 负责内存创建、分配、管理。 PortManager 负责消息通讯的接口管理&#xff0c;处理usrapp发来的消息。roudi.cpp接口消息并调用PortManager来处理。 IceOryxRouDiMemo…

Tkinter 面向对象框架《一》

一、说明 在本教程中&#xff0c;您将学习如何在 Tkinter 中应用面向对象编程以使代码更有条理。首先介绍Tk下小部件&#xff0c;然后介绍Ttk小部件&#xff0c;即如何从ttk.Frame类继承并在根窗口中使用它。 二、定义 Tkinter 面向对象的窗口 2.1 最基本的对象 以下简单程序创…

leetcode-206-反转链表(C语言实现)

题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&…

TA-Lib学习研究笔记(八)——Momentum Indicators 上

TA-Lib学习研究笔记&#xff08;八&#xff09;——Momentum Indicators 上 Momentum Indicators 动量指标&#xff0c;是最重要的股票分析指标&#xff0c;能够通过数据量化分析价格、成交量&#xff0c;预测股票走势和强度&#xff0c;大部分指标都在股票软件中提供。 1. A…

Python函数专题(下)侯小啾python领航班系列(十三)】

Python函数专题(下)侯小啾python领航班系列(十三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

不会代码(零基础)学语音开发(语音开发板)

语音开发板板载资源介绍 通过上图可以看到VDB-150S语音开发板应该是集目前上市的所有语音开发板中板载资源最为丰富的一款开发板。板载的主要资源有&#xff1a; 双色LED状态指示灯&#xff1b;两个测试时使用的按键开关&#xff1b;红外寻迹/接近传感器&#xff1b;固件烧录器…

初识Linux:权限

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 Linux 的权限 内核&#xff1a; 查看操作系统版本 查看cpu信息 查看内存信息 外部程序&#xff1a; 用户&#xff1a; 普通用户变为超级用户&#xff1a; su 和 su-的区别&#xff1a; root用户变成普通用户&#…

管理员配置Jupterhub

在Ubuntu上演示如何部署R语言环境&#xff0c;包括 posit的已经编译了一些R的安装 系统已经装了R&#xff0c;我额外编译的R如何让大家都能用到 如何配置RStudio jupyterhub的配置和使用 管理员如何配置jupyterhub 用户如何配置自己的jupyter环境 Ubuntu上的R部署 这一次…