【鸿蒙基础系列】鸿蒙基础组件

news2024/11/25 10:25:19

🐟作者简介:一名大三在校生,喜欢编程🪴
🐡🐙个人主页🥇:Aic山鱼
🐠WeChat:z7010cyy
🦈系列专栏:🏞️

  • 前端-JS基础专栏✨
  • 前端-Vue框架专栏✨✨
  • Aic山鱼
  • 前端-有趣特效专栏❤️‍🔥❤️‍🔥❤️‍🔥
  • 鸿蒙OS专栏(更新中)
              铭句:将所有微不足道的瞬间编织起来,你将得到绝伦壮丽的宇宙

目录

引言

鸿蒙基础组件概述

ArkTS与TypeScript/JavaScript的区别

组件基础

1. 组件结构

3. Component修饰符

4. build函数

5. 组件属性与方法

6. @Prop和@Link装饰器

常用基础组件

1. Text组件

二、Image组件样式设置

2.1 图片缩放

2.3 边框与圆角


引言

鸿蒙(HarmonyOS)作为华为推出的新一代操作系统,旨在构建万物互联的智能世界。在鸿蒙系统的开发过程中,基础组件是构建丰富、动态用户界面的基石。本文将介绍鸿蒙基础组件的基本概念、分类以及常用组件的使用方法,帮助开发者快速上手鸿蒙应用开发。

鸿蒙基础组件概述

组件(Component)是鸿蒙系统ArkUI声明式开发范式中界面搭建与显示的最小单位。鸿蒙系统为开发者提供了丰富多样的UI组件,这些组件可以根据功能分为五大类:基础组件、容器组件、媒体组件、绘制组件和画布组件。基础组件是视图层的基本组成单元,包括Text、Image、TextInput、Button等,它们是构建用户界面的基础。

ArkTS与TypeScript/JavaScript的区别

ArkTS(Ark TypeScript)HarmonyOS优选的主力应用开发语言,它在TypeScript(TS)的基础上进行了进一步扩展,继承了TS的所有特性,是TS的超集。然而,为了增加语言的规范性并避免不必要的运行开销,ArkTS在TS/JS的基础上增加了一些约束:

  1. 不支持Symbol() API限制了某些高级特性的使用
  2. 不支持索引访问字段:增强了类型安全性。
  3. 不支持delete运算符:限制了对象的动态修改。
  4. 仅允许在表达式中使用typeof运算符:限定了类型检查的场景。
  5. 不支持in运算符:限制了属性的动态检查。
  6. 限制使用标准库:确保语言的一致性和安全性。

此外,ArkTS还具备强大的拓展能力,支持定义声明式UI、自定义组件、动态扩展UI元素,并提供ArkUI系统组件及其事件、方法和属性,共同构成了UI开发的主体。

组件基础

1. 组件结构

鸿蒙系统的组件通常通过@Component修饰符来定义。一个组件必须包含一个build函数,该函数用于描述组件的UI结构。例如:

@Component  
struct MyComponent {  
    build() {  
        // UI描述  
        Row() {  
            Text('Hello, HarmonyOS!')  
        }  
    }  
}


2. struct自定义组件

struct关键字用于描述UI,包含UI的所有信息,但不能有继承关系或重名。自定义组件的struct必须被@Component@CustomDialog等修饰符修饰。

3. Component修饰符

@Component装饰器只能修饰struct关键字声明的数据结构,使其具有组件描述渲染能力。被修饰的struct需要实现build函数,以链式调用的方式描述UI。

4. build函数

build函数是组件的核心,用于定义组件的UI描述。build函数中,开发者可以调用各种系统组件来构建UI界面。build函数的根节点必须为容器组件,且必须唯一。

5. 组件属性与方法

自定义组件还可以包含其他成员函数和属性,但这些成员函数和属性有一定的约束:

  • 不支持静态函数和静态成员变量。
  • 所有成员变量都是私有的,访问规则与成员函数的访问规则相同。
  • 成员变量的初始化可以是可选的,具体取决于是否需要从父组件通过参数传递。

6. @Prop和@Link装饰器

  • @Prop装饰器用于将一个类的属性设置为组件的属性,使其可以从外部传入并在组件中使用。
  • @Link装饰器用于将一个类的属性与某个函数进行关联,允许在组件内部触发这个关联的函数。

常用基础组件

1. Text组件

Text组件用于在界面上展示一段文本信息,可以包含子组件Span。Text组件支持多种文本样式设置,如fontColorfontSizefontStylefontWeightfontFamily

@Entry @Component  
struct TextDemo {  
    build() {  
        Row() {  
            Column() {  
                Text('HarmonyOS')  
                Text('HarmonyOS')  
                    .fontColor(Color.Blue)  
                    .fontSize(20)  
                    .fontStyle(FontStyle.Italic)  
                    .fontWeight(FontWeight.Bold)  
                    .fontFamily('Arial')  
            }  
            .width('100%')  
        }  
        .backgroundColor(0xF1F3F5)  
    }  
}


2. Image组件

Image组件用于渲染展示图片,使界面更加丰富多彩。Image组件支持本地图片和网络图片的加载,并可以通过objectFit属性设置图片的缩放类型。

对于本地图片,Image组件通过指定图片资源的路径来加载。在鸿蒙项目中,图片资源通常放置在项目的resources/base/media/目录下。加载本地图片的示例代码如下:

@Entry  
@Component  
struct ImageDemo {  
    build() {  
        Column() {  
            Image('$r("app.media.icon")') // 加载本地图片  
                .width(100)  
                .height(100)  
        }  
    }  
}

 除了本地图片,Image组件还支持加载网络图片。加载网络图片时,只需将图片的URL作为Image组件的源路径即可。但需要注意的是,为了安全起见,鸿蒙系统对网络访问进行了限制,因此在加载网络图片前,需要在项目的module.json5文件中声明网络访问权限。

 

@Entry  
@Component  
struct NetworkImageDemo {  
    build() {  
        Column() {  
      Image('https://i-blog.csdnimg.cn/direct/4a85e0e1e0d24ac3bdd29a2ad7124ff8.png')
                .width(150)  
                .height(150)  
        }  
    }  
}

 效果:


@Entry
@Component
struct Index {
  @State message: string = '你好 World';

  //Image组件基础使用
  build() {
    Column() {
// 本地图片的添加方法
      Text('本地图片').fontSize(10).fontColor(Color.Gray)
      Image($r('app.media.bj2')).width(150)
      // 网络图片添加
      Text('网络图片').fontSize(10).fontColor(Color.Gray)
      Image('https://i-blog.csdnimg.cn/direct/4a85e0e1e0d24ac3bdd29a2ad7124ff8.png')
        .width(250)
    }.width('100%')

  }
}

 

Image组件样式设置

Image组件提供了丰富的样式设置选项,允许开发者根据需求调整图片的显示效果。以下是一些常用的样式设置方法。

2.1 图片缩放

为了使图片在界面中有更好的显示效果,开发者可以使用objectFit属性来设置图片的缩放类型。objectFit属性决定了图片如何适应其容器的大小,常见的值有ContainCoverFill等。

  • Contain:保持图片的宽高比,将图片缩小或放大以适应容器,但保证图片完全显示在容器内。
  • Cover:保持图片的宽高比,将图片缩小或放大以适应容器,但允许图片的一部分超出容器边界。
  • Fill:不保持图片的宽高比,将图片放大或缩小以完全填充容器。

示例代码如下:

Image('path_to_image')  
    .objectFit(ImageFit.Cover)  
    .width(200)  
    .height(200)

2.2 图片裁剪

除了缩放,鸿蒙还提供了图片裁剪的功能。虽然Image组件本身不直接支持裁剪,但开发者可以通过设置objectPosition属性来控制图片在容器中的位置,从而间接实现裁剪效果。objectPosition属性定义了图片在容器中的对齐方式,如centertop left等。

2.3 边框与圆角

鸿蒙的Image组件还支持设置边框和圆角,使图片展示更加灵活多样。但需要注意的是,直接设置边框和圆角可能需要结合其他组件或自定义绘制来实现。不过,鸿蒙提供了borderRadius属性来设置图片的圆角,使得圆形图片或带圆角的图片展示变得简单。

Image('path_to_image')  
    .borderRadius(20) // 设置圆角  
    .width(100)  
    .height(100)

 总结:

Image组件是鸿蒙UI框架中不可或缺的一部分,它提供了加载和展示图片的基本功能,并通过丰富的样式设置选项和高级应用技巧,使开发者能够轻松实现各种复杂的图片展示效果。

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

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

相关文章

stm32智能颜色送餐小车(红外光管避障)

大家好啊,我是情谊,今天我们来介绍一下我最近设计的stm32产品,我们在今年七月份的时候参加了光电设计大赛,我们小队使用的就是stm32的智能送餐小车,虽然止步于省赛,但是还是一次成长的经验吧,那…

Sql与Rce注入相关漏洞复现

目录 sqli-labs注入第38,48关 第38关(单引号闭合) ​编辑 第48关 (GET请求-基于错误-盲注-数字型-order by 排序 ​编辑 贷齐乐系统多处Sql注入漏洞 环境搭建 将贷齐乐源码放入phpstudy中的www目录下 在phpstudy上创建网站&#xff1…

DevEcoStudio对Gitee进行变基与合并

当尝试将本地分支的更改推送到远程仓库,但是远程仓库中的该分支已经有了您本地分支中没有的提交时,会出现这个提示。 具体来说,这个提示意味着: 推送被拒绝:不能直接将更改推送到远程仓库,因为远程仓库中…

WeNet模型学习笔记

WeNet是一个端到端语音识别模型,由于其优越的特性,成为近几年语音识别领域的热门模型。WeNet模型是一种CTC和attention结构的混合体,以Conformer或Transformer作为encoder,并使用attention decoder对CTC的输出进行重新打分(rescor…

微信小程序用 pinia数据化存储信息

import { defineStore } from pinia import { ref } from vue import type {LoginResult} from /types/member //定义 Store export const useMemberStore defineStore( member, () > { // 会员信息 const profile ref<LoginResult>() //保存会员信息&#xff0c…

MySQL数据库:详细安装与配置指南

目录 背景: 一.下载过程(MySQL数据库): 二.安装过程(MySQL数据库)&#xff1a; 三.验证MySQL是否安装成功 背景: MySQL 是一个流行的开源关系数据库管理(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;后俩该公司被Sun Microsystems收购&#xff0c;Sun Microsyste…

el-table的多选功能

html&#xff1a; <el-table :data"list" row-key"id" selection-change"handleSelectionChange"><el-table-column type"selection" width"55"/> </el-table> js变量&#xff1a; data () {return {/…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

Python 爬数据案例 客户端服务端http请求 推荐 【进阶篇 2 】

网络爬虫数据原来这么简单&#xff01;&#xff01;&#xff01; 前面已经总结了关于python的面向对象继承多态的知识&#xff0c;这里主要是模块、读写文件、http请求网络数据以及如何获取网络数据知识。 网络爬虫是典型的应用程序&#xff0c;它的工作原理就是通过不断的请…

VBA语言専攻T3学员领取资料通知0817

T3学员领取资料通知0817 各位学员∶本周MF系列VBA技术资料增加681-690讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月16日晚上19:00-8月17日中午12:00。本次增加内容&#xff1a; MF691:按所选范围对行进行分组显示 MF692:查找所给范围内的重复项 MF693:文本框Text…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

基于springboot的智能家居系统

TOC springboot198基于springboot的智能家居系统 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式…

day22 Java基础——方法(干货)

day22 Java基础——方法 在Java中&#xff0c;方法是一段组织好的、可重复使用的代码块&#xff0c;用于执行一个特定的操作。方法提供了一种封装代码的方式&#xff0c;使得代码模块化&#xff0c;便于管理和重用。以下是关于Java中方法的一些基本介绍&#xff1a; 文章目录…

对话图像编辑研究综述

MGIE&#xff1a;MLLM 引导图像编辑&#xff08;ICLR 2024&#xff09; https://mllm-ie.github.io/ 利用 MLLM 来增强基于指令的图像编辑 (“what will this image be like if [instruction]” &#xff0c;来重写)。 训练好后&#xff0c;大视觉语言模型直接推导出简洁明确…

FreeRTOS队列(下)

文章目录 一、使用队列实现多设备输入1、增加旋转编码器2、使用队列集执行任务3、增加姿态控制&#xff08;使用MPU6050控制挡球板&#xff09; 二、队列实验_分发数据给多个任务(赛车游戏)三、传输大块数据四、示例&#xff1a;邮箱&#xff08;Mailbox&#xff09;五、队列集…

远程桌面你的凭据不工作解决方法

如果遇到“你的凭据不工作”的提示&#xff0c;请首先确认您输入的凭据是否正确。如果确认无误但仍然出现Windows远程桌面凭据不工作的提示&#xff0c;这可能是由于Windows安全设置的问题所导致的。要解决远程桌面连接提示你的凭据不工作这一问题&#xff0c;您可以尝试以下解…

qemu的VNC协议(RFB协议)

1、握手 1.1、服务器收到客户端TCP连接上后&#xff0c;服务器发送RFB的版本&#xff1a; 52 46 42 20 30 30 33 2e 30 30 38 0a RFB 003.008\n 1.2、客户端收到后回复&#xff1a; 52 46 42 20 30 30 33 2e 30 30 38 0a RFB 003.008\n 2、安全认证 2.1、服务器发送支…

MySQL数据库之part2

一、索引原理与慢查询优化 一&#xff09;介绍 1、为何需要有索引 一般的应用系统&#xff0c;读写比例是10:1左右&#xff0c;而且插入操作和一般的更新操作很少出现性能问题。在生产环境中&#xff0c;我们遇到最多的、也是最容易出问题的还是一些负责的查询操作。因此查询语…

密码学基础---椭圆曲线一文打尽

1.ECC简介及密钥生成 当前公认安全有效的三大类公钥密钥体制分别为基于大数因子分解难题(RSA)、离散对数难题(DSA)和椭圆曲线离散对数&#xff08;ECC&#xff09;难题的密码体制。 最初RSA由于其容易理解被广泛运用&#xff0c;但随着计算机性能的提升&#xff0c;要保证RS…

JavaScript学习笔记(十三):网络请求JS AJAX

1、AJAX - XMLHttpRequest 对象 1.1 XMLHttpRequest 对象是 AJAX 的基石。 创建 XMLHttpRequest 对象定义回调函数打开 XMLHttpRequest 对象向服务器发送请求 1.2 XMLHttpRequest 对象 所有现代浏览器都支持 XMLHttpRequest 对象。 XMLHttpRequest 对象可用于在后台与 Web…