鸿蒙开发入门——声明式UI开发入门简介(1)

news2024/9/23 15:30:57

声明式UI特点

与常规命令式开发的区别在于主导者不同,命令式开发为开发者告诉计算机需要做什么,而声明式开发为开发者告诉计算机自己想要什么结果,怎么做交给预先的程序和算法,让计算机自行推断

  1. 声明式描述
    开发者只需描述在界⾯在不同状态下要呈现的最终效果,⽽⽆需关注界⾯变化的具体过程
  2. 状态驱动视图更新
    在声明式UI中,可以通过定义状态变量的方式使得开发者只需修改状态变量的值,界⾯就会⾃动更新

组件

在鸿蒙开发中,官方的ArkUI提供了很多组件供使用,大体分为两类:

  1. 基础组件
    • Button组件
    • Text组件
    • Image组件
  2. 容器组件
    • Row组件
    • Column组件
    • List组件
    • Grid组件
    • Swiper组件

基础组件提供了界面的呈现的基本元素,而容器组件顾名思义则是容纳基础组件的组件,用于对基础组件进行布局排版
关于自定义组件
自定义组件即是用装饰器@Component进行描述的struct结构体,其可以被其他组件复用

装饰器

装饰器主要用于装饰类、结构、方法以及变量,并赋予其特殊的含义。前期大体会接触到以下组件:

  1. @Entry:表示该自定义组件为入口组件
  2. @Component:表示自定义组件
  3. @State:表示组件中的状态变量,状态变量变化会触发UI刷新

开发思路

我们整体的思路就一点:先排版,再放内容。即将想要的界面UI先布局好了,再往布局的组件中填充内容

build函数

  • 该函数与@Component装饰器同时出现,在build函数中构建想要的组件
  • build函数中有且只能有一个子组件(所以更多时候我们会进行自定义组件的设计)

struct关键字

  • 在自定义组件时则用该关键字定义组件
  • 未进行自定义组件其内部的定义就是页面,一般与ets文件(页面)名相同

关于布局——行组件和列组件居中

首先我们要知道主轴和交叉轴的概念:

  • 主轴:线性布局容器在布局方向上的轴线,子元素默认沿主轴排列。Row容器主轴为水平方向,Column容器主轴为垂直方向
  • 交叉轴:垂直于主轴方向的轴线。Row容器交叉轴为垂直方向,Column容器交叉轴为水平方向

其次我们要知道在行组件中,内里的元素是默认在交叉轴方向是居中的,列组件也是。即行组件内的元素在垂直方向上居中,而列组件内的元素在水平方向居中,所以

  • 组件宽度百分百时,交叉轴方向居中.width('100%'),因为默认不给宽度时,编译器会自动给宽度,此时宽度是不占整个显示界面的宽度的,当给了整个宽度占比后,则会在交叉轴方向水平居中

  • 主轴方向居中需要:.height('100%') .justifyContent(FlexAlign.Center)
    Column组件默认都是从上往下排列的,所以仅在主轴方向给满高度是无法使其居中的,要手动设置内里的元素的对齐方式才可居中
    justify Content:对齐内容。其会将设置了该属性的容器内的元素按所给方式对齐

    Row组件居中原理与Column相同,对应设计即可

关于组件

组件的整体构成如下:(以button为例)
在这里插入图片描述

  • 子组件:不是所有组件都有子组件——看文档
  • 组件参数:具体参数看官方文档
  • 属性方法和事件方法记住常用的一些即可,其它的可查阅官方文档

自定义组件

使用struct添加一个结构体,并用@component装饰器修饰即可,在结构体内部封装自定义组件的代码
注意在创建自定义组件时,可以通过传入对应的属性值进行初始化操作,要通过{ 参数 }的形式操作,如图中的Row组件和SwitchButton组件
在这里插入图片描述

即当一个自定义组件内部有元素(或属性)需要创建时指定初始值则可以将该值在自定义组件中提取为一个内部属性,而不用进行本地初始化

导入和导出

前文入门篇已简单介绍过导入和导出的语法,在自定义组件中,我们也可以将自定义组件封装在一个文件内部,通过导入和导出的方式进行使用
导出:
在这里插入图片描述
导入:
在这里插入图片描述

状态驱动视图更新

通过操作状态数据间接改变ui(无需像QT设计槽函数那样实现跳转)
在这里插入图片描述
@State 装饰器定义状态变量
定义了状态变量后,通过if else来进行条件渲染,通过此使得状态变量关联了状态和视图。本质就是写一个if else语句,只是UI视图的改变无需我们做,我们只要关联其状态即可
简单示例如图:
通过状态变量isOn来控制UI的改变(图片变化)
在这里插入图片描述

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

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

相关文章

《0基础》学习Python——第二十讲__网路爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多,即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容,如果content-typejson类型的,打印上述代码的请求,则用一个命…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总:入门与实战 前言:自从SDXL提出了长宽桶技术之后,彻底解决了不同长宽比的图像输入问题,现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

如何根据同一行的ID利用R语言对值进行求和

需求:将属于同一分组的对应的值进行求和或者求平均值 #设置工作目录 > getwd() [1] "C:/Users/86150/Documents" > setwd("C:/Users/86150/Desktop/AA2024/RUF") > list.files() #读取文件 >install.packages("readxl")…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM(2024 年更新) 一、介绍 你可以把机器学习算法想象成一个装满斧头、剑和刀片的军械库。你有各种各样的工具,但你应该学会在正确的时间使用它们。打个比方,将“线性回归或逻辑回归”视为一把能够有效地切片和切块数据但…

uniapp vue3 上传视频组件封装

首先创建一个 components 文件在里面进行组件的创建 下面是 vvideo组件的封装 也就是图片上传组件 只是我的命名是随便起的 <template><!-- 上传视频 --><view class"up-page"><!--视频--><view class"show-box" v-for"…

纯硬件一键开关机电路的工作原理

这是一个一键开关机电路: 当按一下按键然后松开&#xff0c;MOS管导通&#xff0c;VOUT等于电源电压; 当再次按一下按键然后松开&#xff0c;MOS管关闭&#xff0c;VOUT等于0; 下面来分析一下这个电路的工作原理。上电后&#xff0c;输入电压通过R1和R2给电容充电&#xff0c;最…

MySQL通过bin-log恢复数据

MySQL通过bin-log恢复数据 1.bin-log说明2.数据恢复流程2.1 查看是否开启bin-log2.3 查看bin-log2.4 执行数据恢复操作2.5 检查数据是否恢复 1.bin-log说明 mysqldump和bin-log都可以作为MySQL数据库备份的方式&#xff1a; mysqldump 用于将整个或部分数据库导出为可执行的S…

TeraTerm 使用技巧

参考资料 自分がよく使うTeratermマクロによる自動ログインのやり方をまとめてみたよTera Term マクロでログインを自動化してみたTera Term のススメ 目录 简介一. 常用基础设置1.1 语言变更1.2 log设置 二. 小技巧2.1 指定host别名2.2 新开窗口2.3 设置粘贴多行命令时的行间…

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS&#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候&#xff0c;书上就有一句话&#xff0c;说你把矢量这些东西用久了&#xff0c;就应该形成一种“直觉”&#xff0c;仿佛这些东西就是你的左右手一样。而这次&#xff0c;我居然真的用“直觉”来…

基于上下文自适应可变长熵编码 CAVLC 原理详细分析

CAVLC CAVLC&#xff0c;即Context-Adaptive Variable-Length Coding&#xff0c;是一种用于视频压缩的编码技术&#xff0c;特别是在MPEG-4视频编码标准中使用。CAVLC是一种熵编码方法&#xff0c;它根据视频数据的上下文信息来调整编码长度&#xff0c;以实现更有效的数据压…

【从0到1,训练大模型,从llama3开始】

摘要: 随着大模型越来越多,大家肯定眼花缭乱。不知道选择哪个好,换句话说,不知道哪个才适合自己。 通过社长的实操:chatgpt3.5、gpt4、gpt4o、llama3、通义千问、豆包等大模型,总结是:大家都很好,都能一定程度上的帮助你。 不过怎么说呢,他们什么都懂,但是,什么都不…

sourcetree中常用功能使用方法及gitlab冲突解决

添加至缓存&#xff1a;等于git add 提交&#xff1a;等于git commit 拉取/获取&#xff1a;等于git pull ,在每次要新增代码或者提交代码前需要先拉取一遍服务器中最新的代码&#xff0c;防止服务器有其他人更新了代码&#xff0c;但我们自己本地的代码在我们更新前跟服务器不…

邮件安全篇:企业电子邮件安全涉及哪些方面?

1. 邮件安全概述 企业邮件安全涉及多个方面&#xff0c;旨在保护电子邮件通信的机密性、完整性和可用性&#xff0c;防止数据泄露、欺诈、滥用及其他安全威胁。本文从身份验证与防伪、数据加密、反垃圾邮件和反恶意软件防护、邮件内容过滤与审计、访问控制与权限管理、邮件存储…

面试题 17.14.最小K个数

题目&#xff1a;如下图 答案&#xff1a;如下图 /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* a,int n,int root) {int parent root;int child parent * 2 1;//默认左孩子是大的&#xff0c;将其与右孩子比较&am…

《机器学习》读书笔记:总结“第5章 神经网络”中的概念

&#x1f4a0;神经网络&#xff08;neural network&#xff09; 神经网络是由具有适应性的简单单元组成的广泛并行互联的网络&#xff0c;它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 神经网络中最基本的成分是 神经元(neuron / unit)&#xff0c;即上述定…

机械臂泡水维修|机器人雨后进水维修措施

如果机器人不慎被水淹&#xff0c;别慌&#xff01;我们为你准备了一份紧急的机械臂泡水维修抢修指南&#xff0c;帮助你解决这个问题。 【机器人浸水被淹后紧急维修抢修&#xff5c;如何处理&#xff1f;】 机械臂被淹进水后维修处理方式 1. 机械手淹水后断电断网 首先&am…

Hive分布式SQL计算平台

Hive分布式SQL计算平台 一、Hive 概述二、Hive架构三、Hive客户端 1、Hive有哪些客户端可以使用2、Hive第三方客户端 四、Hive使用语法 1、数据库操作2、内部表&#xff0c;外部表3、数据的导入与导出4、分区表5、分桶表6、复杂类型操作7、数据抽样8、Virtual Columns 虚拟列9…

压缩视频大小的方法 怎么减少视频内存大小 几个简单方法

随着4K、8K高清视频的流行&#xff0c;我们越来越容易遇到视频文件体积过大&#xff0c;导致存储空间不足、传输速度缓慢等问题。视频压缩成为解决这一问题的有效途径&#xff0c;但如何在减小文件大小的同时&#xff0c;保证视频质量不受影响呢&#xff1f;本文将为你揭晓答案…

(10)深入理解pandas的核心数据结构:DataFrame高效数据清洗技巧

目录 前言1. DataFrame数据清洗1.1 处理缺失值&#xff08;NaNs&#xff09;1.1.1 数据准备1.1.2 读取数据1.1.3 查找具有 null 值或缺失值的行和列1.1.4 计算每列缺失值的总数1.1.5 删除包含 null 值或缺失值的行1.1.6 利用 .fillna&#xff08;&#xff09; 方法用Portfolio …