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应用开发快速入门

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CISP知识点,看完这个就够了!

内容较多&#xff0c;编辑了目录方便查看~ 一、信息安全保障 知识点&#xff1a;信息安全概念、信息安全属性、信息安全视角、信息安全发展阶段、信息安全保障新领域、安全保障框架模型、基于时间的PDR与PPDR模型、信息安全保障技术框架、信息系统安全保障评估框架、企业安全…

【Docker部署ELK】(7.15)

1、拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.0 docker pull docker.elastic.co/kibana/kibana:7.15.0 docker pull docker.elastic.co/logstash/logstash:7.15.02、配置文件&#xff08;解压资源到D盘DOCKER目录下&#xff09; 2.1 配置文件…

【Lua】第四篇:字符串操作

文章目录 一. Lua中字符串的表示方法二. 获取字符串长度三. 字符串多行打印方法一&#xff1a;使用 \n 换行方法一&#xff1a;使用 [[ ]] 四. 字符串拼接五. 别的类型转字符串六. 常用字符串接口1. 把字符串内容全转为小写2. 把字符串内容全转为大写3. 字符串翻转4. 子串查找4…

【bug】通过lora方式微调sdxl inpainting踩坑

报错内容 ValueError: Attempting to unscale FP16 gradients. 报错位置 if accelerator.sync_gradients:params_to_clip (itertools.chain(unet_lora_parameters, text_lora_parameters_one, text_lora_parameters_two)if args.train_text_encoderelse unet_lora_parameters…

SpringBoot:Web开发(基于SpringBoot使用MyBatis-Plus+JSP开发)

目录 前期准备 构建项目&#xff08;IDEA2023.1.2&#xff0c;JDK21&#xff0c;SpringBoot3.3.3&#xff09; 添加启动器 Model准备 这里我们利用MybatisX插件生成我们所需要的实体类、数据访问层以及服务层 注意选择MyBatis-Plus3以及Lombok 然后再在service接口中定义…

达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?

问题&#xff1a;我将同事给我的xml文件迁移到盗梦数据库&#xff0c;xml文件大约2G&#xff0c;在导入过程中&#xff0c;总是导入一半都不到就失败了。 原因&#xff1a;我的原因是我的电脑的系统的运行内存是16G的&#xff0c;后来我发现在没导入之前&#xff0c;其他进程已…

android 老项目中用到的jar包不存在,通过离线的方法加载

1、之前的项目用的jar包&#xff0c;已经不在远程仓库中&#xff0c;只能手工去下载&#xff0c;并且安装。 // implementation com.github.nostra13:Android-Universal-Image-Loader // implementation com.github.lecho:hellocharts-android:v1.5.8 这…

Java进阶之集合框架(Set)

【基本内容】 二、Set接口(接上一章) Set是Java集合框架中不允许有重复元素的无序集合&#xff0c;其典型的实现类是HashSet&#xff0c;它完全是遵循Set接口特性规范实现的&#xff0c;无序且不允许元素重复&#xff1b;而Set接口下的实现类还有LinkedHashSet和TreeSort&#…

前后端分离Vue美容店会员信息管理系统o7grs

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取 技术栈介绍 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xff0c;本选题是学生所学专业知识的延续&#xff0c;符合…

java项目之疫情下图书馆管理系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的疫情下图书馆管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息。 项目简介&#xff1a; 疫情下图书馆管理系…

【OJ刷题】双指针问题6

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;OJ刷题入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1…

OpenAI o1——人工智能推理能力的飞跃,助力高级问题解决

前言 开放人工智能 新模型&#xff0c; OpenAI o1 或草莓&#xff0c;代表了 人工智能。它以 OpenAI 的 GPT 系列等先前模型为基础&#xff0c;并引入了增强的推理能力&#xff0c;从而加深了科学、编码和数学等各个领域的问题解决能力。与主要擅长处理和生成文本的前辈不同&a…

Pandas的入门操作-Series对象

Pandas的数据结构 Series对象 class pandas.Series(dataNone, indexNone) data参数 含义&#xff1a;data是Series构造函数中最主要的参数&#xff0c;它用来指定要存储在Series中的数据。 数据类型&#xff1a;data可以是多种数据类型&#xff0c;例如&#xff1a; Python 列…

【JavaEE初阶】多线程6(线程池\定时器)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 实例3:线程池 参数解释 核心线程数, 最大线程数 允许空闲的最大时间 ,时间单位 任务队列(阻塞队列) 线程工厂>工厂设计模式 拒绝策略 使用举例 模拟实现一个线…

leetcode:最高乘法得分

用auto可以过 class Solution { public:long long maxScore(vector<int>& a, vector<int>& b) {int n b.size();vector<vector<long long>> memo(4,vector<long long>(b.size(), LLONG_MIN));auto dfs [&](auto&& dfs, i…

构建自己的文生图工具:Python + Stable Diffusion + CUDA

构建自己的文生图工具&#xff1a;Python Stable Diffusion CUDA 前言概述环境搭建安装PyTorch安装Stable Diffusion编写Python代码结论结语 前言 在这个数字化和人工智能飞速发展的时代&#xff0c;图像生成技术正逐渐成为现实。想象一下&#xff0c;只需输入几个关键词&…

Nginx反向代理出现502 Bad Gateway问题的解决方案

&#x1f389; 前言 前一阵子写了一篇“关于解决调用百度翻译API问题”的博客&#xff0c;近日在调用其他API时又遇到一些棘手的问题&#xff0c;于是写下这篇博客作为记录。 &#x1f389; 问题描述 在代理的遇到过很多错误码&#xff0c;其中出现频率最高的就是502&#x…

【数据结构与算法 | 灵神题单 | 自顶向下DFS篇】力扣1022,623

1. 力扣1022&#xff1a;从根到叶的二进制之和 1.1 题目&#xff1a; 给出一棵二叉树&#xff0c;其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如&#xff0c;如果路径为 0 -> 1 -> 1 -> 0 -> 1&#xff0c;那…

OpenHarmony(鸿蒙南向开发)——标准系统方案之扬帆移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

SpringBoot---------Actuator监控

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2、开启配置 management.endpoints.web.exposure.include* 3、启动项目&#xff0c;查看监控…