鸿蒙开发(五)鸿蒙UI开发概览

news2024/9/29 7:04:43

    从用户角度来讲,一个软件拥有好看的UI,那是锦上添花的事情。再精确的算法,再厉害的策略,最终都得通过UI展现给用户并且跟用户交互。那么,本篇一起学习下鸿蒙开发UI基础知识,认识下各种基本控件以及使用方式。

目录

一、UI开发概述

 1、初识ArkTS语言

2、基本语法概述

三、声明式UI描述

1、创建控件

2、配置控件属性

3、配置事件

四、代码和效果


鸿蒙系列上一篇

鸿蒙开发(四)UIAbility和Page交互-CSDN博客文章浏览阅读484次,点赞11次,收藏6次。通过上一篇的学习,相信大家对UIAbility已经有了初步的认知。在上篇中,我们最后实现了一个小demo,从一个UIAbility调起了另外一个UIAbility。当时我提到过,暂不实现比如点击EntryAbility中的控件去触发跳转,而是在EntryAbility加载完后直接打开FuncUIAbility。本篇,带着大家一起学习下UIAbility和Page之间的交互。https://blog.csdn.net/qq_21154101/article/details/135645660?spm=1001.2014.3001.5501

一、UI开发概述

    方舟开发框架(简称ArkUI)为HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

    ArkUI提供了两种UI开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)。推荐使用声明式开发范式,本篇以及后续的文章都是基于声明式开发范式。

    声明式开发范式采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建HarmonyOS应用UI所必需的能力:

 1、初识ArkTS语言

    ArkTS是HarmonyOS开发的主力语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展,继承了TypeScript的所有特性。所以,如果有TypeScript语言的开发经验,上手会非常快。但如果你没有TypeScript的经验,我觉得问题也不大。

当前,ArkTS在TS的基础上主要扩展了如下能力:

  • 基本语法

    ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,提供了多种系统组件及其相关的事件方法、属性方法。

  • 状态管理

    ArkTS提供了多维度的状态管理机制。与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。

  • 渲染控制

    ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。

2、基本语法概述

    接下来,基于一个简单的页面示例,一起学习下基本语法。如下图所示的代码,当点击按钮时,文本内容从“Hello World”变为“Hello ArkUI”。

  • 装饰器

    用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Component和@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组件中的状态变量,状态变量变化会触发UI刷新。(看起来很牛,弱弱的多说一句,这就类似Java的注解)

  • UI描述

以声明式的方式来描述UI的结构,例如build()方法中的代码块。(看着也很厉害,其实就是new了一个View,设置了width/height以及size等属性)

  • 自定义组件

可复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Hello。(嗯,就好比一个自定义的ViewGroup,里面又包含了很多View)

  • 系统组件

ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用,比如示例中的Column、Text、Divider、Button。(这个没什么多说的,就是一些系统的最小单元的View)

  • 属性方法

组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。(别怕,android也有,几乎一毛一样的)

  • 事件方法

组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()。(其实就类似Android的OnXXXListener)

三、声明式UI描述

    通过上面对UI基本语法的学习,相信大家已经对UI开发有了基本的了解。接下来我们手把手的去写一写demo,创建几个常用的控件,并且给控件设置各种各样的属性,并且对控件增加事件。

1、创建控件

    创建控件包含有参数和无参数两种方式,这个不用多说,根据控件的构造方法来的。

(1)无参。例如Row(),Column(),Divider()等

(2)有参。例如Image等

 build() {
    Row() {
      Column() {
        Text('文本')
        Divider()
        Button('按钮')
        Divider()
        Image($r('app.media.icon'))
      }
      .width('100%')
    }
    .height('100%')
  }

2、配置控件属性

    以“.”链式调用的方式配置控件的样式和其他属性,可以为控件配置内容、宽高、颜色、字体大小等,建议每个属性方法单独写一行。如下:

Text(this.message)
          .fontSize(50)                 // 设置文本大小
          .fontColor(Color.Blue)        // 设置文本颜色
          .fontWeight(FontWeight.Bold)  // 设置文本样式 - 粗体

3、配置事件

    以“.”链式调用的方式配置控件的事件,可以设置多个事件,建议每个事件方法单独写一行,如下:

Button('按钮')                   
          .fontSize(20)
          .onClick(() => {              // 设置点击事件
            this.message = 'Hello ArkUI'
          })

四、代码和效果

    以下是该章节的所有代码:

@Entry
@Component
struct Index {
  @State message: string = 'Hello Harmony'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50) // 设置文本大小
          .fontColor(Color.Blue) // 设置文本颜色
          .fontWeight(FontWeight.Bold) // 设置文本样式 - 粗体
        Divider()
        Button('按钮') // 设置按钮文本
          .fontSize(20)
          .onClick(() => { // 设置点击事件
            this.message = 'Hello ArkUI'
          })
        Divider()
        Image($r('app.media.icon'))
          .width(100) // 设置图片宽高
          .height(100)
      }
      .width('100%')
    }
    .height('100%')
  }
}

    一起看下效果:

    本篇介绍了UI开发的基础知识,包括ArkTS的基本语法、声明式UI的使用方法(创建控件、为控件配置属性、增加事件等)。在最后呢,我把本篇的代码全附在了最后,并且给大家演示了效果。下一篇,会跟大家一起学习下鸿蒙UI开发的布局。

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

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

相关文章

基于Java图书商城系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

三星Galaxy S24 系列了发布会预热新品:Galaxy Ring 智能戒指亮相

在三星 Galaxy S24 系列发布会上,他们不仅带来了新款手机,还意外地推出了一款智能指环 ——Galaxy Ring!没错,就是戴在手指上的那种智能设备! 在发布会的尾声,三星放出了一段简短的预告片,让我…

美摄视频SDK的HDR格式编辑方案

在当今的视觉媒体时代,高动态范围(HDR)技术已成为高质量视频内容的标配。为了满足企业对高效、高质量视频处理的需求,美摄科技推出了业界领先的视频SDK,全面支持多种HDR标准的图像视频进行处理。 一、核心优势 HDR全…

【Docker】安装nacos以及实现负载均衡

🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 前言 一.nacos单个部署 1.镜像拉取 …

Java实现厦门旅游电子商务预订系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

2024-01-18 在Android Studio中,可以通过修改build.gradle文件(位于你的应用模块目录下)来自定义生成的APK名称

一、在Android Studio中,可以通过修改build.gradle文件(位于你的应用模块目录下)来自定义生成的APK名称,在build.gradle里面增加下面的代码 applicationVariants.all { variant ->variant.outputs.all {outputFileName "…

Segment Anything:SAM系列模型总结

Segment Anything | Meta AIhttps://segment-anything.com/ SAM https://arxiv.org/pdf/2304.02643.pdf 新的图像分割任务:这样的任务需要实现零样本泛化。新的模型:Segment Anthing Model。目前分为vit_b,vit_l,vit_h新的数据集&#xff…

使用人工智能助手 Github Copilot 进行编程 01

本章涵盖了 AI 助⼿如何改变新程序员的学习⽅式为什么编程永远不会再⼀样了AI 助⼿如 Copilot 的⼯作原理Copilot 如何解决⼊⻔级编程问题AI 辅助编程的潜在危险 在本章中,我们将讨论人类如何与计算机进行交流。我们将向您介绍您的 AI 助手 GitHub Copilot&#x…

Git 基本命令与操作流

记录 Git 中的基本命令和创建仓库、提交文件、删除文件等方面的操作 Git 基本命令 git status:查看状态 nothing to commit, working directory clean:所有已跟踪文件在上次提交后都未被更改过,或者说当前目录下没有出现任何处于未跟踪状态…

一篇文章带你彻底了解flex布局

哈喽,大家好呀,我是前端理想哥,今天我们来聊聊 flex 布局。 好,主角登场。 CSS 弹性盒子模型( Flexible Box 或者 Flexbox ) 先来看看它的定义:弹性布局是指通过调整其内元素的宽高,从而在任何显示设备上…

Conmi的正确答案——eclipse C/C++显示“未解析的包含:<xxx.h>”/“Unresolved inclusion: <xxx.h>”

eclipse IDE 版本&#xff1a;2023-12 部分采自&#xff1a;解决方法&#xff1a;关于问题 “C - Unresolved inclusion: <iostream>” 解释事项&#xff1a;方法一可能版本不同&#xff0c;部分界面修改了。这里使用的是方法二的解决方法。&#xff08;或者各位大神的描…

Dubbo使用详解

简介 Dubbo是一个高性能、轻量级的开源Java RPC框架&#xff0c;由阿里巴巴公司开发并开源。它提供了三大核心能力&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均衡&#xff0c;以及服务自动注册和发现。Dubbo使得应用可通过高性能的 RPC 实现服务的输出和输…

ITSS内幕揭秘!不看后悔!

1️⃣ ITSS&#xff1f;那是啥玩意&#xff1f; ITSS&#xff0c;就是一套超酷的信息技术服务标准大全&#xff01;它规范了所有信息技术服务的小秘密&#xff0c;确保服务可靠又让人放心&#xff01;&#x1f4aa; 2️⃣ 哪些公司需要这个神器&#xff1f; ITSS可是个大家伙&a…

Unity 程序员UI编码规范

今天给大家分享Unity UI开发相关的一些编码和规范&#xff0c;有了这些指导规范&#xff0c;帮助你的项目获得更好的性能&#xff0c;少走弯路。Unity GUI&#xff08;也被称为UGUI&#xff09;经常是项目性能问题的来源。 考虑使用多分辨率和宽高比 大部分情况下&#xff0c…

解锁文字魔法:探索自然语言处理的秘密——从技术揭秘到应用实战!

目录 前言 关键技术——揭密自然语言处理的秘密武器&#xff01; 领域应用——自然语言处理技术在不同领域的奇妙表演&#xff01; 超越极限——自然语言处理技术面临的顽强挑战揭秘&#xff01; 科技VS伦理——自然语言处理技术的发展与伦理社会的纠结较量&#xff01; 开…

EasyX图形化学习(三)

1.帧率&#xff1a; 即每秒钟界面刷新次数&#xff0c;下面以60帧为例&#xff1a; 1.数据类型 clock_t&#xff1a; 用来保存时间的数据类型。 2.clock( ) 函数&#xff1a; 用于返回程序运行的时间,无需参数。 3.例子&#xff1a; 先定义所需帧率&#xff1a; const …

力扣 | 11. 盛最多水的容器

双指针解法–对撞指针 暴力解法public int maxArea1(int[] height) {int n height.length;int ans 0;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {int area Math.min(height[i], height[j]) * (j - i);ans Math.max(ans, area);}}return ans;}双指针解法…

力扣每日一练(24-1-18)

经验一&#xff1a;不要把问题想复杂 Python&#xff1a; min_price float(inf)max_profit 0for price in prices:min_price min(min_price, price)max_profit max(max_profit, price - min_price)return max_profit C#&#xff1a; public int MaxProfit(int[] prices) {i…

MySQL(视图,存储函数,存储过程)

作业1&#xff1a; 作业实现&#xff1a; 首先创建学生表&#xff0c;课程表&#xff0c;以及学生选课表。 CREATE TABLE Student (Sno INT PRIMARY KEY,Sname VARCHAR(20) NOT NULL,Ssex CHAR(1) CHECK (Ssex IN (男, 女)),Sage INT,SDept VARCHAR(20) DEFAULT 计算机 );CRE…

AI小程序添加深度合成类目解决办法

基于文言一心和gpt等大模型做了一个ai助理小程序&#xff0c;在提交“一点AI助理”小程序时&#xff0c;审核如下&#xff1a; 失败原因1 审核失败原因 你好&#xff0c;你的小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务&#xff0c;请补充选择&#xff1a;深度…