【鸿蒙(HarmonyOS)】UI开发的两种范式:ArkTS、JS(以登录界面开发为例进行对比)

news/2024/7/21 12:31:51 标签: harmonyos, ui, javascript

文章目录

  • 一、引言
    • 1、开发环境
    • 2、整体架构图
  • 二、认识ArkUI
    • 1、基本概念
    • 2、开发范式(附:案例)
      • (1)ArkTS
      • (2)JS
  • 三、附件

一、引言

1、开发环境

之后关于HarmonyOS技术的分享,将会持续使用到以下版本

  • HarmonyOS:3.1/4.0
  • SDK:API 9 Release
  • Node.js:v14.20.1
  • DevEco Studio: 3.1.0

2、整体架构图

在这里插入图片描述

二、认识ArkUI

HarmonyOS应用的UI开发依赖于方舟开发框架(简称ArkUI)
根据官方介绍,ArkUI提供了UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

1、基本概念

(官方已经给出了非常详细的介绍,我这里就照搬,主要为后面的实操进行铺垫)

  • UI:即用户界面。开发者可以将应用的用户界面设计为多个功能页面,每个页面进行单独的文件管理,并通过页面路由API完成页面间的调度管理如跳转、回退等操作,以实现应用内的功能解耦。
  • 组件:UI构建与显示的最小单位,如列表、网格、按钮、单选框、进度条、文本等。开发者通过多种组件的组合,构建出满足自身应用诉求的完整界面。

2、开发范式(附:案例)

ArkUI为开发者提供了两种范式:基于TypeScript声明式范式(ArkTS)、兼容JS的类Web开发范式(JS)

在这里插入图片描述

(1)ArkTS

ArkTS我也仅仅学习了四个月,相比较我在使用JS开发UI界面上而言,有所偏弱。
对比较于Android:ArkUI将界面设计和具体操作放到的一个文件中(当然ArkUI有组件自定义,这个就另当别论),这个方式比较新颖。在内存的占用上会相对减低很多,性能和维护上也相对提升很多。

在这里插入图片描述

(2)JS

HTML、CSS、JS这一套技术,相信很多IT人都已经非常熟悉,这也是我能快速入手HarmonyOS的重要因素。个人也是比较推荐使用这套技术进行简单应用,如果要使用到手机硬件功能的话,推荐使用ArkTS。ArkTS在操作编写上比JS要方便很多。

在这里插入图片描述

三、附件

  • ArkTS代码
@Entry
@Component
struct Index {

  @State textName: string = "账号/电话号码"
  @State textPass: string = "密码"
  @State btnLogin: string = "登录"

  build() {
    Row() {
      Column() {
        // person
        Image($r('app.media.person')).width(100).height(100).margin({top:50, bottom:50})
        // data
        TextArea({ placeholder : this.textName}).margin(15)
        TextArea({ placeholder : this.textPass}).margin(15)
        // btn
        Button(this.btnLogin, { type: ButtonType.Normal, stateEffect: true })
          .borderRadius(18)
          .backgroundColor(0x317aff)
          .width(90)
          .height(40)
          .margin({top:50})
      }
    }
  }
}
  • JS代码

index.hml

<div class="container">
    <!--  title  -->
    <div class="login-title">
        <image class="person" src="../../common/person.png"></image>
    </div>
    <!--  data  -->
    <div class="input-data">
        <input type="text" required="" id="userName" placeholder="账号\电话号码"/>
    </div>
    <div class="input-data">
        <input type="text" required="" id="userPass" placeholder="密码"/>
    </div>
    <!--  btn  -->
    <div class="login-btn">
        <button>{{ $t('strings.btn_dl') }}</button>
    </div>
</div>
  • index.css
.container {
    display: flex;
    flex-direction: column;
    align-items: center;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    background: linear-gradient(-135deg, #50c8c2, #4158d0);
}

.person {
    text-align: center;
    background: linear-gradient(-135deg, #ff2481ef, #ffe03092);
    width: 230px;
    height: 230px;
    margin: 100px;
    border-radius: 230px;
}

@media screen and (orientation: landscape) {
    .title {
        font-size: 60px;
    }
}

@media screen and (device-type: tablet) and (orientation: landscape) {
    .title {
        font-size: 100px;
    }
}

.input-data{
    padding: 40px;
}

.login-btn button{
    margin-top: 80px;
    padding: 30px;
}


http://www.niftyadmin.cn/n/5022782.html

相关文章

解决微信小程序报错:“SyntaxError:Unexpected end of JSON input”

1. 报错原因&#xff1a; 如果对象的参数或数组的元素中遇到地址&#xff0c;地址中包括?、&这些特殊符号时&#xff0c;对象/数组先要通过JSON.stringify转化为字符串再通过encodeURIComponent编码&#xff1b;接收时&#xff0c;先通过decodeURIComponent解码再通过JSON…

4.后端·新建子模块与开发(传统模式)

文章目录 学习资料新建子模块与各层查询entity的列表entitymapper层service层controller层 测试 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p8&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e b站的学习视频 新建子模块与各层 在r…

学习day59

昨天学了插槽&#xff0c;但是没有即笔记了 今天的是vuex 总体来说&#xff0c;vuex就是一个共享单车&#xff0c;每个人都可以使用他&#xff0c;也可也对他进行反馈。即把一个数据列为vuex&#xff0c;然后每个组件可以使用这个对象&#xff0c;也可也反过来反馈他 这一个设…

工作纪实38-ES分页数据问题

之前分页查询有接ES&#xff0c;随着系统使用时间数据量不断增加&#xff0c;会有如下报错。关键信息就是 Result window is too large, from size must be less than or equal to: [10000] but was [100001] 当索引非常非常大(千万或亿)&#xff0c;是无法按照from size做深…

时间序列论文-聚类和异常检测(二)

同样摘自知乎的回答&#xff1a;https://www.zhihu.com/question/29507442/answer/1212624591?utm_id0 正巧之前做过时间序列 的异常检测项目&#xff0c;这里介绍几种尝试过的方法&#xff0c;也算是抛砖引玉 吧&#xff0c;欢迎大家讨论交流~ 背景与定义 时间序列异常 检测…

Android studio实现登录验证后返回token及用户信息,使用token获取用户信息并生成列表展示

大概时序图 登录成功保存token&#xff0c;然后带token请求获取用户列表 实现效果&#xff1a; 依赖 build.gradle(:app) dependencies {implementation androidx.recyclerview:recyclerview:1.2.1implementation com.google.code.gson:gson:2.8.9implementation com.tenc…

数据结构——排序算法——希尔排序

希尔排序本质上是对插入排序的一种优化&#xff0c;它利用了插入排序的简单&#xff0c;又克服了插入排序每次只交换相邻两个元素的缺点。它的基本思想是&#xff1a; 1.将待排序数组按照一定的间隔分为多个子数组&#xff0c;每组分别进行插入排序。这里按照间隔分组指的不是…

实训笔记9.12

实训笔记9.12 Scala笔记一、学习Scala的目的二、Scala的基本概念2.1 JDK1.8版本的新特性2.2 Scala的运行机制 三、Scala的基本语法3.1 Scala中输出语句、键盘输入、注释语法3.1.1 Scala注释三种&#xff0c;和Java一模一样的3.1.2 Scala键盘输入3.1.3 Scala输出 3.2 Scala变量和…