HarmonyOS系统开发ArkTS入门案例及组件(三)

下一章

目录

一、声明式UI

二、ArkTs 快速入门案例

三、组件

四、渲染控制


一、声明式UI

  声明式UI就是一种编写用户界面的范式或方式、
  ArArkTS 在继承了Typescript语法的基础上,主要扩展了声明式UI开发相关的能力。
  声明式UI开发范式大致流程:定义页面状态、描述页面效果、改变状态

1、定义页面状态
   分析和定义页面的各种状态,声明状态变量表示不同的状态。如显示开灯关灯状态
   @State isOn:boolean =false; //默认关灯   
   @State 表示是状态变量,只有状态变量修改,页面才会更新。   
   
2、描述界面显示效果
   描述界面在不同状态下的显示效果,如开灯效果和关灯效果
   关灯显示关灯照片
   开灯显示开灯照片


3、改变状态
   点击按钮改变状态,如开灯状态和关灯状态
   点击关灯isOn:boolean =false,显示关灯照片
   点击开灯isOn:boolean =true ,显示开灯照片
   

二、ArkTs 快速入门案例


    @Entry
    @Component
    struct LightPage {
      @State isOn: boolean = false;
      build() {
        Column({ space: 20 }) {
          if (this.isOn) {
            Image('pages/helloworld/light/solution/images/img_light.png')
              .height(300)
              .width(300)
              .borderRadius(20)
          } else {
            Image('pages/helloworld/light/solution/images/img_dark.png')
              .height(300)
              .width(300)
              .borderRadius(20)
          }
          Row({ space: 50 }) {
            Button('关灯')
              .onClick(() => {
                this.isOn = false
              })
            Button('开灯')
              .onClick(() => {
                this.isOn = true;
              })
          }
        }
        .height('100%')
        .width('100%')
        .justifyContent(FlexAlign.Center)
      }
    }

三、组件

1、声明式组件
    组件由 组件名称、组件参数、组件属性方法、组件事件方法、子组件组成。
    组件名称(组件参数){ 子组件 }.组件属性方法().组件属性方法().组件事件方法
    ============================================================

      组件 Button

      Button({ type: ButtonType.Circle }) {
        子组件
        Image('pages/light/images/img_light.png')
          .width(25)
          .height(25)
      }
      .witdh(50)
      .height(50)
      .backgroundColor(Color.Red)
      .onclick(() => {
        console.log('创建组件 onclick 测试');
      })

组件案例
===============================================================

  @Entry
      @Component
      struct Index {
        @State isOn: boolean = false;
        @State isDel: boolean = false;
      
        build() {
          Column({ space: 10 }) {
            if (this.isDel) {
              Image('pages/delete/images/man.jpg').width(300).height(300);
            } else {
              Image('pages/delete/images/girl.jpg').width(300).height(300);
            }
            Row({ space: 20 }) {
              Button('还原')
                .onClick(() => {
                  this.isDel = false;
                });
              Button() {
                Image('pages/delete/images/ic_delete.png')
                  .width(25).height(25)
              }
              .type(ButtonType.Circle)
              .width(50).height(50).backgroundColor(Color.Red)
              .onClick(() => {
                this.isDel = true;
              });
            }
          }
          .width('100%')
          .height("100%")
          .justifyContent(FlexAlign.Center)
      
        }
      }

      
2、自定义组件
   提高代码复用性
   @Component 装饰器:装饰 struct 关键字声明的数据结构
   @Entry 装饰器:标识该组件为组件树的根节点,也就是一个页面入口组件
   struct:ArkTS用于自定义组件或者自定义定义弹窗的关键字,与结构类相似
   build() build() 用于声明自定义组件的UI结构
   组件属性:定义组件的属性

自定义组件案例
============================================================
    SwitchButton.ets文件:

    @Component
    export struct SwitchButton {
      color: Color = Color.Blue
    
      build() {
        Button() {
          Image('pages/on_off/images/icon_switch.png')
            .width(25).height(25)
        }
        .type(ButtonType.Circle)
        .width(50)
        .height(50)
        .backgroundColor(this.color)
      }
    }

   ============================================================
    on_off.etc文件:  

  import { SwitchButton } from './SwitchButton';
    @Entry
    @Component
    struct on_off {
      @State isOn: boolean = false;
      @State isDel: boolean = false;
    
      build() {
        Column({ space: 30 }) {
          if (this.isDel) {
            Image('pages/on_off/images/man.jpg').width(300).height(300);
          } else {
            Image('pages/on_off/images/girl.jpg').width(300).height(300);
          }
          Row({ space: 30 }) {
            SwitchButton({ color: Color.Green })
              .onClick(() => {
                this.isDel = false;
              });
    
            SwitchButton({ color: Color.Red })
              .onClick(() => {
                this.isDel = true;
              });
          }
        }
        .width('100%')
        .height("100%")
        .justifyContent(FlexAlign.Center)
    
      }
    }

   

四、渲染控制


if...else  和 Foreach循环


if...else案例    =========================================================================
    PlayButton.ets文件:
    ---------------------

    @Component
    export struct PlayButton {
      color: Color = Color.White;
      isShow: boolean = true;
      build() {
        Button() {
          Image('pages/condition/images/' + (this.isShow ? "ic_play.png" : "ic_pause.png"))
            .width(50).height(50)
        }
        .width(100)
        .height(100)
        .backgroundColor(this.color)
      }
    }

    paly.ets文件:
    ---------------------

    import { PlayButton } from './playButton';
    
    @Entry
    @Component
    struct Play {
      @State isRunning: boolean = true;
    
      build() {
        Column({ space: 10 }) {
          if (this.isRunning) {
            Image('pages/condition/images/girl.jpg').width(300).height(300);
          } else {
            Image('pages/condition/images/man.jpg').width(300).height(300);
          }
    
          Row() {
            if (this.isRunning) {
              PlayButton({ isShow: this.isRunning })
                .onClick(() => {
                  this.isRunning = false;
                })
            }else {
              PlayButton({ isShow: this.isRunning })
                .onClick(() => {
                  this.isRunning = true;
                })
            }
          }
        }
        .width('100%')
        .height("100%")
        .justifyContent(FlexAlign.Center)
      }
    }

    Foreach循环案例  
    =======================================================================================
    FruitButton.ets文件:
    ---------------------

    @Component
    export struct PlayButton {
      color: Color = Color.White;
      isShow: boolean = true;
      build() {
        Button() {
          Image('pages/condition/images/' + (this.isShow ? "ic_play.png" : "ic_pause.png"))
            .width(50).height(50)
        }
        .width(100)
        .height(100)
        .backgroundColor(this.color)
      }
    }


    
    fruit.ets文件:
    ---------------------
 

   import { PlayButton } from './playButton';
    
    @Entry
    @Component
    struct Fruit {
      @State options: string[] = ['桃子', '苹果', '香蕉', '香梨', '荔枝'];
      @State answer: string = '_______?';
      @State color: Color = Color.Black;
      @State fontSize: number = 25;
    
      build() {
        Column({ space: 23 }) {
          Row({ space: 15 }) {
            Text('你最喜欢的水果是')
              .fontColor(Color.Black)
              .fontSize(25)
              .fontWeight(FontWeight.Bold)
            Text(this.answer)
              .fontColor(this.color)
              .fontSize(this.fontSize)
              .fontWeight(FontWeight.Bold)
          }
    
          ForEach(this.options, (item: string) => {
            Column({ space: 40 }) {
              Button(item)
                .fontSize(32)
                .width(180)
                .height(90)
                .backgroundColor(Color.Orange)
                .onClick(() => {
                  this.answer = item;
                  this.color = Color.Red;
                  this.fontSize=44;
                })
            }
    
          })
        }
        .width('100%')
        .height("100%")
        .justifyContent(FlexAlign.Center)
      }
    }


    
    
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb:AOP、配置优先级、Bean管理、SpringBoot原理、Maven高级

1 AOP 1.1 基本语法 面向切面编程、面向方面编程&#xff0c;面向特定方法编程 在管理bean对象的过程中&#xff0c;主要通过底层的动态代理机制&#xff0c;对特定的方法进行编程 应用&#xff1a;统计每一个业务方法的执行耗时 xml引入依赖 <!-- AOP-->&l…

CSS样式,1行文字溢出...省略,2行文字溢出...省略,多行文字溢出...省略

提示&#xff1a;CSS样式文字溢出…省略 文章目录 前言一、1行文字溢出...省略二、2行或多行文字溢出...省略三、1行或多行文字溢出...省略总结 前言 一、1行文字溢出…省略 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset…

华为ensp中ospf基础 原理及配置命令(详解)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言———— OSPF 的全称是 Open Shortest Path First&#xff0c;意为“开放式最短路径优先”。是一种内部网关协…

10米等高线地形图图源

让GIS更简单高效&#xff0c;让地图更丰富及时&#xff01; 最近新发现一个图源&#xff0c;这是一个有10米等高线和山体阴影的地形图数据。 我们现在将该图源加载到水经微图&#xff08;以下简称“微图”&#xff09;Web版后&#xff0c;为你分享其城区二维效果图&#xff0…

vscode中转(跳板)连接目标主机

vscode中转&#xff08;跳板&#xff09;连接目标主机 文章目录 引言正文跳转配置本地密钥 总结 引言 简单讲解如何通过vscode经过跳板机到达目标机的方式&#xff0c;本文基于linux平台&#xff0c;理论上vscode是跨平台的1。 如下本机通过两层跳板到目标主机如何通过vscode…

Jenkins安装Role-based Authorization Strategy不生效

Jenkins安装Role-based Authorization Strategy不生效&#xff0c;需开启Role-based 访问策略。 https://blog.51cto.com/zengestudy/1782494

01-JavaScript基础语法

1. 计算机基础 1.1 计算机组成 1.2 数据存储(重点) 计算机内部使用二进制 0 和 1来表示数据。 所有数据&#xff0c;包括文件、图片等最终都是以二进制数据&#xff08;0 和 1&#xff09;的形式存放在硬盘中的。 所有程序&#xff0c;包括操作系统&#xff0c;本质都是各种…

马斯克开源Grok-1

Grok-1是由马斯克AI创企xAI发布的第一代大语言模型&#xff0c;它以其巨大的参数量——高达3140亿&#xff0c;引起了全球范围内的广泛关注。这一参数量远超其他知名模型&#xff0c;如OpenAI的GPT-3.5&#xff0c;后者仅有1750亿参数。在2024年3月17日&#xff0c;马斯克宣布将…

js和go的列表转树形, 执行速度测试对比

js代码&#xff0c;浏览器上运行 // 列表转树形 export function deepTree(list: any[]): any[] {const newList: any[] [];const map: any {};for (let index 0; index < list.length; index) {const e list[index];map[e.id] e;}for (let index 0; index < list…

【Android】系统启动流程分析 —— init 进程启动过程

本文基于 Android 14.0.0_r2 的系统启动流程分析。 一、概述 init 进程属于一个守护进程&#xff0c;准确的说&#xff0c;它是 Linux 系统中用户控制的第一个进程&#xff0c;它的进程号为 1&#xff0c;它的生命周期贯穿整个 Linux 内核运行的始终。Android 中所有其它的进程…

第四讲 Buffer Pool

问题&#xff1a;DBMS 是如何管理其内存和磁盘之间来回移动数据的&#xff1f; 答案&#xff1a;在决定如何在磁盘中来回移动数据时&#xff0c;我们必须考虑两个关键方面&#xff1a; 空间控制【Spatial Control】&#xff1a; 将页【pages】写在在磁盘的什么地方&#xff…

线性表:关于链表(主要以单链表为例)的相关理解和应用

多清澈这天空 晴雨相拥 同心逐梦&#xff01; 坚守我信心 一路出众&#xff01;&#xff01; 首先&#xff0c;按照惯例&#xff0c;欢迎大家边听歌边观看本博客 ▶ 紫荆花盛开 (163.com)&#xff08;建议复制链接&#xff0c;浏览器打开&#xff0c;csdn打开太慢了&#x…

吉时利keithley 2604B数字源表

181/2461/8938产品概述&#xff1a; Keithley 2604B 源表可让您比以前更快、更轻松、更经济地进行精密直流、脉冲和低频交流源测量测试。Keithley 2604B 的 IV 功能测试测试速度是竞争产品的两到四倍&#xff0c;其结合了&#xff1a; Keithley 的高速第三代源测量单元 (SMU)…

Linux学习-进程

目录 进程基本概念 进程相关命令 进程的创建 进程的调度 进程相关函数接口 进程的消亡 实例&#xff1a;创建九个子进程 目录 进程基本概念 进程相关命令 进程的创建 进程的调度 进程相关函数接口 进程的消亡 实例&#xff1a;创建九个子进程 exec函数…

Typecho博客后台登陆界面美化

登录界面&#xff1a; 食用方法&#xff1a; 备份 admin 目录 压缩包内容上传到 admin 目录内。 结构:网站根目录 /admin/login.php 结构:网站根目录 /admin/style 修改 login.php 第35行&#xff0c;把“季春二九管理后台”替换成自己的信息 清理缓存&#xff0c;开始体验新的…

罐头鱼AI矩阵获客批量混剪运营系统介绍

罐头鱼AI矩阵——智能运营系统助力抖音视频创作 随着社交媒体的普及&#xff0c;视频内容创作成为了企业营销的重要手段。为了帮助您更高效地进行视频内容创作和发布&#xff0c;我们推出了罐头鱼AI矩阵&#xff0c;一款集智能混剪、关键词生成、发布管理等功能于一体的全新运营…

交易的成功并非仅依赖于拥有强大的工具,而在于如何用好你的工具

任何领域伟大的成就往往源于个人不屈不挠地克服重重障碍的能力&#xff0c;这种毅力和决心并非普通人所具备&#xff0c;因此他们往往只能停留在普通和平凡的层面。 而对于那些渴望在交易领域取得卓越成就的人来说&#xff0c;坚持采用一套经过验证且有效的交易系统&#xff0c…

ArtDD 一键下载 掘金、CSDN、开源中国、博客园文章 文章的Chrome 插件

有想一键下载博客园、掘金、CSDN、开源中国等博客自己的文章到本地的可以使用这个插件 插件会根据当前页面链接自动分辨出文章所属平台&#xff0c;可能有些文章详情链接是不支持的&#xff0c;例如博客园存在很多个版本的文章详情页链接格式&#xff0c;想要支持所有的链接是…

设计模式之抽象工厂模式解析

抽象工厂模式 1&#xff09;问题 工厂方法模式中的每个工厂只生产一类产品&#xff0c;会导致系统中存在大量的工厂类&#xff0c;增加系统的开销。 2&#xff09;概述 a&#xff09;产品族 和 产品等级结构 产品等级结构&#xff1a;产品的继承结构&#xff1b; 产品族&…

武汉星起航引领跨境电商新潮流,一站式孵化平台助力合作伙伴腾飞

在全球经济一体化的大趋势下&#xff0c;跨境电商以其独特的优势逐渐成为连接各国市场的桥梁。随着市场竞争的加剧&#xff0c;传统的经营模式已难以满足日益复杂的业务需求&#xff0c;合作伙伴迫切需要更为全面、专业的指导和支持。正是在这样的背景下&#xff0c;武汉星起航…