ArkTs声明式UI开发

一 类和接口

1.1 类的创建与使用

ets 复制代码
class 类名 {
	属性
	方法
}

// entry\src\main\ets\models\Product.ets
class Product {
  // 属性
  num: number
  name: string
  price: number

  // 构造方法  不能重载
  constructor(num: number, name: string, price: number) {
    this.num = num
    this.name = name
    this.price = price
  }

  // 方法
  show() {
    console.log("show", this.num, this.name, this.price)
  }
}

export default Product // 外部需要调用 这个是必要的


// entry\src\main\ets\pages\Index.ets
import Product from '../models/Product' // 调用者使用

1.2接口和类的区别

类:对象的集合

接口:表示的是一种能力

ets 复制代码
interface 接口名 {
	属性
	方法
}

// 门,防盗门,防火门

interface FFire{}
interface FWater{}

// class Door implements FFire {
//
// }
class Door implements FFire,FWater {
}

二、ArkTs声明式UI开发

2.1 基本结构

ets 复制代码
@Entry
@Component
struct LoginPage {
  @State message: string = 'Hello World';

  /**
   * 用一些组件放置到界面,用来搭建界面的结构
   * **/
  build() {
    Column() {

    }
  }
}

2.2 ArkUI常见布局

2.2.1 行布局Row

布局结构从左至右

ets 复制代码
@Entry
@Component
struct LoginPage {
  @State message: string = 'Hello World';

  /**
   * 用一些组件放置到界面,用来搭建界面的结构
   * **/
  build() {
    Row() {
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
    }
  }
}

2.2.2 列布局Column

  • 自上而下的布局方式
  • 默认是主轴居中
  • 效果:子元素在主轴的起始位置对齐。
1. justifyContent 主轴布局
  • FlexAlign.SpaceBetween:以起止点为范围,均分

  • FlexAlign.Start: 主轴起始点对齐,默认值

  • FlexAlign.End:主轴结尾对齐

  • FlexAlign.SpaceEvenly:均分空白范围

  • FlexAlign.SpaceAround:每个元素周围的空白范围一致

2.2.3 弹性布局Flex

ets 复制代码
@Entry
@Component
struct LoginPage {
  @State message: string = 'Hello World';

  /**
   * 用一些组件放置到界面,用来搭建界面的结构
   * **/
  build() {
    Flex({
      direction: FlexDirection.Row,// 主轴的方向
      justifyContent: FlexAlign.SpaceBetween, // 主轴方向的排列方式
      alignItems: ItemAlign.Center, // 交叉轴方向的排列方式
    }) {
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
    }
    .width(250)
    .height(250)
    .border({ width: 1, color: Color.Blue })
  }
}

当数量过多时会出现以下的情况,元素被压缩但是始终不会换行,所以需要设置属性wrap

ets 复制代码
@Entry
@Component
struct LoginPage {
  @State message: string = 'Hello World';

  /**
   * 用一些组件放置到界面,用来搭建界面的结构
   * **/
  build() {
    Flex({
      direction: FlexDirection.Row,// 主轴的方向
      justifyContent: FlexAlign.SpaceBetween, // 主轴方向的排列方式
      alignItems: ItemAlign.Center, // 交叉轴方向的排列方式
      wrap:FlexWrap.Wrap, // 换行
    }) {
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
      Text("1").width(50).height(50).backgroundColor(Color.Gray)
      Text("2").width(50).height(50).backgroundColor(Color.Pink)
      Text("3").width(50).height(50).backgroundColor(Color.Yellow)
    }
    .width(250)
    .height(250)
    .border({ width: 1, color: Color.Blue })
  }
}

2.2.4 堆叠布局Stack

类似于前端的绝对定位

默认是居中对齐的

相关推荐
威哥爱编程4 小时前
HarmonyOS 5.1手势事件详解
harmonyos
HarderCoder5 小时前
使用仓颉语言理解 SOLID 原则:概念、实战与踩坑总结
harmonyos
爱笑的眼睛119 小时前
HarmonyOS 应用开发深度解析:ArkTS 声明式 UI 与状态管理最佳实践
华为·harmonyos
安卓开发者9 小时前
鸿蒙Next ArkWeb进程解析:多进程架构如何提升Web体验
前端·架构·harmonyos
damo王10 小时前
鸿蒙(HarmonyOS) 历史
华为·harmonyos
爱笑的眼睛1112 小时前
HarmonyOS声明式UI开发:深入ArkUI与状态管理实践
华为·harmonyos
爱笑的眼睛1112 小时前
HarmonyOS 应用开发进阶:深入 Stage 模型与 ArkUI 声明式开发实践
华为·harmonyos
2501_9197490312 小时前
鸿蒙:更改状态栏、导航栏颜色
华为·harmonyos
2501_9197490312 小时前
鸿蒙:@Builder 和 @BuilderParam正确使用方法
华为·harmonyos
爱笑的眼睛1112 小时前
HarmonyOS应用开发:深入解析Stage模型与UIAbility
华为·harmonyos