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

HarmonyOS 速记

目录

  • 装饰器
    • @Entry(入口)
    • @Component(组件)
    • @State(状态)
    • @Prop(属性)
    • @Preview(预览)
      • Previewer
      • Inspector
  • 结构体
    • struct
    • build
    • 自定义组件
      • 自定义 Custom 组件
  • 容器
    • Row(行) & Column(列)
    • RelativeContainer(相对布局容器)
    • margin
    • padding
    • Swiper(轮播图)
    • Grid(网格容器)
    • List(列表)
  • 组件
    • Image(图片)
      • 图片的填充模式
    • Text(文本)
      • 组件:左上角对齐
      • 文字:左对齐
  • 参考

装饰器

@Entry(入口)

@Entry 装饰的 @Component 将作为 UI 页面的入口
在单个 UI 页面中,最多可以使用@Entry 装饰一个自定义组件

@Entry
@Component
struct Index {}

@Component(组件)

@Component 装饰了 struct 关键字声明的类 Index

  • Index 被 @Component 装饰后具备组件化的能力,通过实现 build 方法描述 UI
  • @Component 装饰的 struct 类必须添加 @Component 装饰器,开发工具有提示
@Component
struct Index {build() {}
}

@State(状态)

文本信息由 @State 装饰器装饰的状态变量 message 驱动

@State message: string = 'HarmonyOS 速记';

@Prop(属性)

@Prop 装饰器,用于从父组件接收数据

  • 注意:加入 @Prop 后,Previewer 会失效

@Preview(预览)

Previewer

  • Previewer 可以直接预览 @Entry 装饰的整个页面
    也可以预览由 @Preview 装饰的单独组件
  • 预览 @Entry 装饰的整个页面时,需要选中 @Entry 所在的文件,Previewer 才能顺利打开
  • 将 Previewer 调整至 ComponentMode,便可以单独预览组件视图
  • 如果修改的是文本内容,则需要手动保存(即 ctrl+s)后,Previewer 才会更新
    如果修改的是相关属性,则不需要手动保存,Previewer 也会实时更新
  • 注意:此时的 Inspector 是不可用状态

Inspector

开启 Previewer 工具栏的 Inspector 工具,可以观察到当前组件树,并与 Previewer 交互

结构体

struct

定义组件结构体

  • @Component 装饰的 struct 类必须添加 @Component 装饰器,开发工具有提示
  • @Component 装饰的 struct 类必须重写 build 函数,开发工具有提示
struct Index {}

build

组件通过 build 函数用于描述 UI

  • @Component 装饰的 struct 类必须重写 build 函数,开发工具有提示
 build() {}

自定义组件

@Component
struct Custom {build() {}
}

自定义 Custom 组件

@Preview // 用于组件预览
@Component // 定义组件
struct Custom { // 组件名build() {Image($r('app.media.banner_pic1')) // 图片.width('100%') // 宽度.padding({ // 内边距left: 16,top: 10,right: 16,bottom: 10}).borderRadius(16) // 圆角.objectFit(ImageFit.Contain) // 缩放模式}
}

使用 Previewer 查看效果
自定义 Custom 组件

容器

Row(行) & Column(列)

    Row() {Column() {Text(this.message).fontSize(20).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')

RelativeContainer(相对布局容器)

alignRules 在 RelativeContainer 中设置对齐规则(位置:上中下、左中右)

  • top、center、bottom 上中下
  • left、middle、right 左中右

注:alignRules 属性在 Row & Column 容器中无效

	// 水平、竖直居中RelativeContainer() {Text(this.message).fontSize(20).fontWeight(FontWeight.Bold).alignRules({ // 对齐规则center: {anchor: '__container__',align: VerticalAlign.Center},middle: {anchor: '__container__',align: HorizontalAlign.Center}})}.width('100%').height('100%')

正常效果:Start -> Top/Center/Bottom

异常效果:Start -> Top/Center/Bottom

正常效果:Top -> Start/Middle/End

异常效果:Top -> Start/Middle/End

函数 alignRules 声明

alignRules(value: AlignRuleOption): T;

参数 AlignRuleOption 源码

declare interface AlignRuleOption {top?: { // 上anchor: string;align: VerticalAlign;};center?: { // 中anchor: string;align: VerticalAlign;};bottom?: { // 下anchor: string;align: VerticalAlign;};left?: { // 左anchor: string;align: HorizontalAlign;};middle?: { // 中anchor: string;align: HorizontalAlign;};right?: { // 右anchor: string;align: HorizontalAlign;};bias?: Bias;
}

结论

top、center、bottom、left、middle、right

  • 对应着 设置子控件的基线,即以子控件的哪个位置作为对齐的基准点

VerticalAlign#Top、Center、Bottom & HorizontalAlign#Start、Center、End

  • 这些属性才是对应着 设置子控件相对于父布局的对齐规则,但需要配合上面的基准来使用才会得到想要的正确效果

margin

外边距

      Text(this.message)// .margin(12).margin({left: 20,top: 20,right: 20,bottom: 20})

padding

内边距

      Text(this.message)// .padding(12).padding({left: 20,top: 20,right: 20,bottom: 20})

Swiper(轮播图)

使用Swiper构建轮播图


@Entry
@Component
struct Index {@State message: string = 'HarmonyOS 速记';build() {Column() {// TitleText(this.message).padding({left: 16,top: 10,right: 16,bottom: 10}).width('100%').textAlign(TextAlign.Start).fontWeight(FontWeight.Bold)// BannerBanner().margin({left: 16,right: 16})}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}@Preview
@Component
struct Banner {// Banner 数据源@State banners: Array<BannerBean> = [new BannerBean('pic0', $r('app.media.banner_pic0'),'https://developer.huawei.com/consumer/cn/training/course/video/C101718352529709527'),new BannerBean('pic1', $r('app.media.banner_pic1'),'https://developer.huawei.com/consumer/cn/'),new BannerBean('pic2', $r('app.media.banner_pic2'),'https://developer.huawei.com/consumer/cn/deveco-studio/'),new BannerBean('pic3', $r('app.media.banner_pic3'),'https://developer.huawei.com/consumer/cn/arkts/'),new BannerBean('pic4', $r('app.media.banner_pic4'),'https://developer.huawei.com/consumer/cn/arkui/'),new BannerBean('pic5', $r('app.media.banner_pic5'),'https://developer.huawei.com/consumer/cn/sdk')];build() {Swiper() { // 轮播图ForEach(this.banners, // 数据源(item: BannerBean, index: number) => { // 用于生成 item 组件Image(item.imageSrc).width('100%').borderRadius( 10 ) // 设置图片的圆角,不是 Banner 的圆角,所以感觉有点怪异.objectFit(ImageFit.Contain)},(item: BannerBean, index: number) => item.id // 用于 item 增量更新,所以需要 id)}.autoPlay(true) // 开启自动播放.loop(true) // 开启轮训// .interval(1000) // 时间间隔// .indicator(true) // 使用默认的指示器.indicator( // 配置指示器new DotIndicator().color('#1a000000').selectedColor('#0A59F7'))}
}/*** Banner 结构体*/
class BannerBean {id: string = '';imageSrc: ResourceStr = '';url: string = '';constructor(id: string, imageSrc: ResourceStr, url: string) {this.id = id;this.imageSrc = imageSrc;this.url = url;}
}

Swiper 轮播图

Grid(网格容器)

网格容器,由“行”和“列”分割的单元格所组成,其中容器内各条目对应一个 GridItem 组件
如果仅设置行、列数量与占比中的一个,则网格单元将按照设置的方向排列,超出Grid显示区域后,Grid拥有可滚动能力
设置单行显示,则赋能套件部分可以横向滑动
网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局

List(列表)

List容器可以轻松高效地显示结构化、可滚动的信息。当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能

组件

Image(图片)

用于显示图片,使用 $r(‘app.media. 文件名字’) 将 media 文件夹下的图片读取到 Image 组件

    Image($r('app.media.banner_pic1')) // 设置图片资源.width('100%') // 宽度.padding({ // 内边距left: 16,top: 10,right: 16,bottom: 10}).borderRadius(16) // 圆角.objectFit(ImageFit.Contain) // 缩放模式

图片的填充模式

.objectFit(ImageFit.Contain)

设置图片的填充模式

  • Contain 模式,即保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内
  • Cover 模式,即保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。

Text(文本)

组件:左上角对齐

      Text(this.message) // 默认宽度 wrap_content.id('HelloWorld').fontSize(20).fontWeight(FontWeight.Bold).fontStyle(FontStyle.Italic).lineHeight(55).alignRules({ // 对齐规则:左上角(top、left) 为 对其基准点top: { // 上边缘 为 对其基准点anchor: '__container__',align: VerticalAlign.Top // 上对齐},left: { // 左边缘 为 对其基准点anchor: '__container__',align: HorizontalAlign.Start // 左对齐}})

文字:左对齐

      Text(this.message).width('100%') // 设置宽度 match_parent.textAlign(TextAlign.Start) // 设置文字朝向 居左

参考

HarmonyOS应用开发快速入门

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 18、Python如何读写csv文件
  • Netty笔记09-网络协议设计与解析
  • 佛山网站制作与设计
  • [掌握API速率限制:如何高效管理请求频率]
  • Simulink仿真理想二极管模型
  • 【C#生态园】虚拟现实与增强现实:C#开发库全面评估
  • 【Linux】Linux项目自动化构建工具-make/Makefile
  • Go语言并发编程之Channels详解
  • 【Java】基础语法介绍
  • 力扣刷题之2398.预算内的最多机器人数目
  • 【Windows】使用 WMI 获取系统版本信息
  • Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.
  • JVM运行区域介绍
  • C#基于SkiaSharp实现印章管理(7)
  • 计算机网络 --- 初识协议
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Git 使用集
  • GitUp, 你不可错过的秀外慧中的git工具
  • javascript 哈希表
  • LeetCode18.四数之和 JavaScript
  • nginx 配置多 域名 + 多 https
  • node-glob通配符
  • Redis在Web项目中的应用与实践
  • Ruby 2.x 源代码分析:扩展 概述
  • TypeScript实现数据结构(一)栈,队列,链表
  • 阿里云购买磁盘后挂载
  • 初识 beanstalkd
  • 软件开发学习的5大技巧,你知道吗?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 线性表及其算法(java实现)
  • 携程小程序初体验
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #QT 笔记一
  • #数据结构 笔记三
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1)虚拟机的安装与使用,linux系统安装
  • (C语言)fgets与fputs函数详解
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)SpringBoot3---尚硅谷总结
  • (一)WLAN定义和基本架构转
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)可以带来幸福的一本书
  • 、写入Shellcode到注册表上线
  • .net core 6 redis操作类
  • .net core docker部署教程和细节问题
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作