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

类似于前端的绝对定位

默认是居中对齐的

相关推荐
m0_7496902310 小时前
【寻迹校园 HarmonyOS NEXT 实战 16】Preferences 还是 RelationalStore:HarmonyOS 本地存储选型实战
华为·harmonyos·arkts·preferences·relationalstore
2501_9197490313 小时前
华为鸿蒙免费听歌APP—小羊免费听歌
华为·harmonyos·鸿蒙
OH_TPC14 小时前
HarmonyOS APP开发---"祝福圈"节日贺卡App,需要用到这个库
harmonyos
m0_7496902316 小时前
【寻迹校园 HarmonyOS NEXT 实战 31】举报去重怎么做:同一记录的重复投诉不应制造多条处理中案件
harmonyos·arkts·relationalstore·内容治理·举报去重
贾伟康17 小时前
【中国方言题库|11】HarmonyOS ArkTS 学习统计实战:计算地区学习进度与收藏数量
harmonyos·arkts·arkui·数据统计·多设备适配
用户12695508791417 小时前
RK3588 + OpenHarmony 6.1 RKNN2 NPU 验证指南
harmonyos
m0_7496902318 小时前
【寻迹校园 HarmonyOS NEXT 实战 35】先写全页面 Design Spec 再写 ArkUI:一个比赛项目的设计稿门禁实践
harmonyos·响应式设计·设计规范·arkui·ui设计
Magic-ZYJ19 小时前
HarmonyOS 日记类 App 的日期设计:本地自然日、月历与夏令时边界
华为·harmonyos·arkts·arkui·问题排查·移动端开发·独立开发者
贾伟康19 小时前
【中国方言题库|12】HarmonyOS ArkTS 题库列表组件实战:减少多地区页面重复并保证点击反馈
harmonyos·arkts·arkui·组件化·多设备适配