鸿蒙NEXT开发-ArkUI(基于最新api12稳定版)

news2024/12/22 9:58:26

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

专栏地址: https://blog.csdn.net/qq_56760790/category_12794123.html

目录

1. 基本介绍

2. ArkUI组件

2.1 ArkUI组件-Image

2.2 ArkUI组件-Text

2.3 ArkUI组件-TextInput

2.4 ArkUI组件-Button

2.5 ArkUI组件-slider

2.6 ArkUI组件-Row、Column

2.6.1 Row

2.6.2 Column

2.6.3 登录小案例

2.7 ArkUI组件-其他布局容器组件

2.7.1 Flex

2.7.2 绝对定位position

2.7.3 布局元素的组成

2.8 ArkUI组件-List

2.9 ArkUI组件-Scroll

3. 视频学习

1. 基本介绍

ArkUI(方舟开发框架)是一套构建鸿蒙应用界面的框架

ArkUI将组件大概分为这么几类

  • 基础组件:界面呈现的基础元素,如文字、图片、按钮等
  • 容器组件:控制布局排布,如Row行、Column列等
  • 绘制组件:画布、图形、渲染等
  • 动画组件
  • 安全组件
  • 自定义组件

........

布局思路:先排版,再放内容

官方地址:文档中心

组件使用:

  • 使用组件采用 组件名() 的语法
  • 有构造参数采用 组件名(参数)的语法
  • 组件里放置子组件采用 组件名() { 子组件的语法 } 的链式语法
  • 组件设置属性采用 组件名().width().height() 的语法
  • 组件又有属性又有子组件采用 组件名(){ ... 子组件 }.width().height() 的语法

容器组件语法:

容器组件(){

}

基本组件语法:

基本组件()

2. ArkUI组件

2.1 ArkUI组件-Image

作用:界面中展示图片

语法:Image(图片数据源)支持网络图片资源和本地图片资源

  • 加载本地图片方式

将图片放对应工程模块下面的resources下面的base里面的media

Image($r('app.media.文件名'))

  • 加载网络图片
Image('网络图片地址')

大家注意的是:你在预览器可能能看到加载成功的网络图片,但其实你少操作了一步,如果部署在模拟器或者真机上,是看不到网络图片的,加载出来的是空白,因为缺少权限,需要手动申请应用权限

使用网络图片时,需要申请权限ohos.permission.INTERNET

在module.json5文件中加上(也就是在module下面加上requestPermissions)

{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet",
      "2in1"
    ],
    "requestPermissions":[
      {
        "name" : "ohos.permission.INTERNET",
        "reason": "$string:reason",
        "usedScene": {
          "abilities": [
            "FormAbility"
          ],
          "when":"inuse"
        }
      }
    ],

2.2 ArkUI组件-Text

作用:显示一段文本

Text(content?: string | Resource , value?: TextOptions)

string格式,直接填写文本内容

Text('风景')

Resource格式,读取本地资源文件

Text($r('app.string.reason'))

添加文本属性

Text('风景')
  .fontSize(20)  // 字体大小
  .fontColor(Color.Blue)  // 字体颜色
  .fontWeight(FontWeight.Lighter) // 字体粗细
  .lineHeight(32) // 行高

2.3 ArkUI组件-TextInput

作用:单行文本输入框

TextInput(value?: TextInputOptions)

TextInputOptions对象说明

  • placeholder 设置无输入时的提示文本。
TextInput({placeholder:'请求输入手机号'})
  • text 设置输入框当前的文本内容
TextInput({text:'东林'})
  • controller8+ 设置TextInput控制器。

导入对象

controller: TextInputController = new TextInputController()

该对象可以设置输入光标的位置等

添加属性和事件

 TextInput({placeholder:'请输入密码'})
          .width(100) // 宽
          .height(30) // 高
          .type(InputType.Password) // 输入框类型
          .backgroundColor('#fff') // 背景色
          .onChange(value=>{
            console.log(value)
          })

InputType枚举说明

  • Normal 基本输入模式,无特殊限制。
  • Password 密码输入模式。
  • Email 邮箱地址输入模式
  • Number 纯数字输入模式。
  • PhoneNumber9+ 电话号码输入模式。
  • USER_NAME11+ 用户名输入模式。
  • NEW_PASSWORD11+ 新密码输入模式。
  • NUMBER_PASSWORD11+ 纯数字密码输入模式。
  • NUMBER_DECIMAL11+ 带小数点的数字输入模式。
  • URL12+ 带URL的输入模式。

2.4 ArkUI组件-Button

作用:按钮组件,可以创建不同样式的按钮

Button(label: ResourceStr, options?: ButtonOptions)

ButtonOptions类型值

  • type 描述按钮显示样式。默认值:ButtonType.Capsule
  • stateEffect 按钮按下时是否开启按压态显示效果,当设置为false时,按压效果关闭。默认值:true
  • buttonStyle 描述按钮的样式和重要程度。默认值:ButtonStyleMode.EMPHASIZED
  • controlSize 描述按钮的尺寸。默认值:ControlSize.NORMAL
  • role 描述按钮的角色。默认值:ButtonRole.NORMAL

文字按钮

Button('点我')

自定义按钮,在Button内嵌套其他组件

Button(){
  Image($r('app.media.test')).width(50)
}

添加属性和事件

Button('点我')
  .width(100)
  .height(30)
  .type(ButtonType.Capsule)
  .onClick(()=>{
    console.log('我被点了')
  })

ButtonType按钮类型

2.5 ArkUI组件-slider

作用:滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。

Slider(options?: SliderOptions)

SliderOptions对象说明

  • value 当前进度值。
  • min 设置最小值。
  • max 设置最大值。
  • step 设置Slider滑动步长。
  • style 设置Slider的滑块与滑轨显示样式。
  • direction8+ 设置滑动条滑动方向为水平或竖直方向。
  • reverse8+ 设置滑动条取值范围是否反向,横向Slider默认为从左往右滑动,竖向Slider默认为从上往下滑动。
      Slider({
        min:0, // 最小值
        max:100, // 最大值
        value:40,  // 当前值
        step:10,  // 滑动步长
        style:SliderStyle.OutSet, // InSet
        direction:Axis.Horizontal, // Vertical
        reverse:false  // 是否反向滑动
      })
        .width('90%')
        .showTips(true)  // 是否展示value百分比提示
        .blockColor('#36d') // 滑块里面颜色
        .trackThickness(10) // 滑轨粗细
        .onChange(value=>{
          // 滑块值
        })

SliderStyle枚举说明

  • OutSet 滑块在滑轨上。
  • InSet 滑块在滑轨内。
  • NONE12+ 无滑块

2.6 ArkUI组件-Row、Column

Row 和Column的布局方式成为线性布局- 不是横向排列就是纵向排列

2.6.1 Row

沿水平方向布局容器。

用法:Row(value?:{space?: number | string })

space 横向布局元素间距,默认0,单位vp

横向布局-采用Row

百分比说明: 鸿蒙的里面的百分比指的是相对当前父容器,并不是当前的手机屏幕

在写宽度高度时,直接写数字默认单位为vp虚拟像素,屏幕会进行适配。

属性:

alignItems 设置子元素在交叉轴方向的对齐格式

语法 alignItems(value: VerticalAlign)

VerticalAlign参数枚举

justifyContent 设置子组件在水平方向上的对齐格式

语法 justifyContent(value: FlexAlign)

FlexAlign参数枚举

api12还增加了一个属性

reverse 设置子组件在主轴(即水平方向)上的排列是否反转

语法:reverse(isReversed: Optional<boolean>)

@Entry
  @Component
  struct Index {
    build() {
      Column() {
        Row({space:15}){
          Text('第一个').width(100).height(100).backgroundColor(Color.Blue)
          Text('第二个').width(100).height(100).backgroundColor(Color.Yellow)
          Text('第三个').width(100).height(100).backgroundColor(Color.Pink)
        }.width('100%').height('100%').justifyContent(FlexAlign.Center)
          .alignItems(VerticalAlign.Center)
      }.width('100%').height('100%')
    }
  }

2.6.2 Column

沿垂直方向布局的容器

用法:Column(value?: {space?: string | number})

space 纵向布局元素垂直方向间距,默认0,单位vp

纵向布局-采用column

属性:

alignItems 设置子组件在水平方向上的对齐格式

语法:alignItems(value: HorizontalAlign)

参数HorizontalAlign:子组件在水平方向上的对齐格式。默认值:HorizontalAlign.Center

justifyContent 设置子组件在垂直方向上的对齐格式

语法:justifyContent(value: FlexAlign)

参数FlexAlign:子组件在垂直方向上的对齐格式。默认值:FlexAlign.Start

reverse 设置子组件在主轴(即竖直方向)上的排列是否反转

语法:reverse(isReversed: Optional<boolean>)

@Entry
  @Component
  struct Index {
    build() {
      Column() {
        Column({space:15}){
          Text('第一个').width(100).height(100).backgroundColor(Color.Blue)
          Text('第二个').width(100).height(100).backgroundColor(Color.Yellow)
          Text('第三个').width(100).height(100).backgroundColor(Color.Pink)
        }.width('100%').height('100%').justifyContent(FlexAlign.Center)
          .alignItems(HorizontalAlign.Center)
      }.width('100%').height('100%')
    }
  }

总结:属性justifyContent 设置子元素在主轴方向的对其格式 参数是 FlexAlign枚举

属性alignItems 设置子元素在交叉轴(垂直主轴方向的轴)方向的对齐格式 Row 容器使用VerticalAlign枚举 Column容器使用HorizontalAlign枚举

2.6.3 登录小案例

实现应用登录界面的编写

@Entry
@Component
struct Index {
  build() {
    Column() {
      // 华为账号登录
      Column({space:20}){
        TextInput({placeholder:'请输入手机号'})
          .width(300)
          .borderRadius(2)
        TextInput({placeholder:'请输入验证码'})
          .type(InputType.Password)
          .width(300)
          .borderRadius(2)

          Text('短信验证码登录').fontColor(Color.Blue).align(Alignment.Start).width('80%')

      }

      Button('登录')
        .width(300)
        .type(ButtonType.Normal)
        .borderRadius(10)
        .backgroundColor(Color.Red)
    }.justifyContent(FlexAlign.Center).width('100%').height('100%')
  }
}

2.7 ArkUI组件-其他布局容器组件

2.7.1 Flex

弹性布局 ,默认布局方向是主轴水平往右,交叉轴垂直向下(row)

语法:

Flex(value?: FlexOptions)

Flex(){
  Text('1').width(100).backgroundColor(Color.Blue)
  Text('2').width(100).backgroundColor(Color.Red)
  Text('3').width(100).backgroundColor(Color.Yellow)
  Text('4').width(100).backgroundColor(Color.Pink)
  Text('1').width(100).backgroundColor(Color.Blue)
  Text('2').width(100).backgroundColor(Color.Red)
  Text('3').width(100).backgroundColor(Color.Yellow)
  Text('4').width(100).backgroundColor(Color.Pink)
}

FlexOptions对象说明

官方文档:文档中心

2.7.2 绝对定位position

作用:控制组件位置,可以实现层叠效果

特点:

1、参照父组件左上角进行偏移

2、绝对定位后的组件不在占用自身原有位置

语法: .position(位置对象)

参数:{x:水平偏移量,y:垂直偏移量}

Text('测试').position({
  x:150,y:50
})

zIndex层级

作用:调正组件层级

语法: .zIndex(数字)

参数:取值为整数数字,取值越大,显示层级越高

@Entry
  @Component
  struct Index {
    build() {
      Column() {
        Text('测试').backgroundColor(Color.Red).width(100).height(200).position({x:0}).zIndex(1)
        Text('东林').backgroundColor(Color.Yellow).width(100).height(100).position({x:0})
      }.width('100%').height('100%')


    }
  }

2.7.3 布局元素的组成

内边距 padding

作用:在组件内添加间距,拉开内容与组件边缘之间的距离

Text('测试').padding(20)  // 四个方向内边距都为20
Text('测试').padding({
  top:10,
  right:20,
  bottom:40,
  left:80
})  // 四个方向内边距分别设置

外边距 margin

作用:在组件外添加间距,拉开两个组件之间的距离

// 四个方向外边距都是20
Text('外边距').margin(20)
// 四个方向外边距分别设置
Text('外边距').margin({
  top:20,
  right:30,
  left:50,
  bottom:100
})

2.8 ArkUI组件-List

list(列表)包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。

特点:

1、列表项(ListItem)数量过多超过屏幕后,会自动提供滚动功能

2、列表项既可以纵向排列,也可以横向排列

注意:列表项里面只能包含一个根组件

语法:

List(value?:{space?: number | string, initialIndex?: number, scroller?: Scroller})

参数说明:

space:子组件主轴方向的间隔,默认值:0

initialIndex:设置当前List初次加载时视口起始位置显示的item的索引值,默认值:0

scroller:可滚动组件的控制器。用于与可滚动组件进行绑定

属性方法:

listDirection(value: Axis) 设置List组件排列方向。

@Entry
@Component
struct Index {
  @State message: string = '你是谁';

  build() {
    Column() {
      List({space:10}){
        ForEach([1,2,3,4,5,6,7,8,9,10],(item:number)=>{
          ListItem(){
            Text('哈哈')
              .width('100%')
              .height(100)
              .backgroundColor(Color.Red)
              .padding({left :150})

          }
        })
      }.width('100%').listDirection(Axis.Vertical)
    }.width('100%').height('100%')
  }
}

2.9 ArkUI组件-Scroll

可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。

语法:Scroll(scroller?: Scroller)

属性:

在基本的布局组件 Column/Row/Flex中不论内容超出与否,皆不会出现滚动条

出现滚动条的组件

  • List(列表)
  • Grid
  • Scroll(滚动条)
  • Swiper(轮播)
  • WaterFlow(瀑布流)

出现滚动条的前提条件是- 上述组件中的子组件的内容超出了父容器组件的宽度或者高度

用法说明:

1、只支持一个子组件

2、滚动方向(支持横向和纵向,默认纵向)

@Entry
@Component
struct Index {
  build() {
    Column() {
      Scroll() {
        Column({space:10}){
          ForEach(Array.from({length:10}),(item:string,index)=>{
            Text('测试文本'+(index+1))
              .width('100%')
              .height(100)
              .textAlign(TextAlign.Center)
              .backgroundColor(Color.Orange)
              .fontSize(20)
              .fontColor(Color.White)
              .borderRadius(10)
          })

        }
      }.width('100%').height(200)
      .scrollBar(BarState.Auto)  // on一直显示 off一直隐藏 auto滑动显示
      .scrollBarColor(Color.Blue) // 滚动条颜色
      .scrollBarWidth(5) // 滚动条宽度
      .edgeEffect(EdgeEffect.Spring) // 设置边缘滑动效果  弹簧
    }
  }
}

3. 视频学习

全网首发鸿蒙NEXT星河版零基础入门到实战,2024年最新版,企业级开发!视频陆续更新中!_哔哩哔哩_bilibili

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

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

相关文章

自定义注解加 AOP 实现服务接口鉴权以及内部认证

注解 何谓注解&#xff1f; 在Java中&#xff0c;注解&#xff08;Annotation&#xff09;是一种特殊的语法&#xff0c;用符号开头&#xff0c;是 Java5 开始引入的新特性&#xff0c;可以看作是一种特殊的注释&#xff0c;主要用于修饰类、方法或者变量&#xff0c;提供某些信…

中英翻译神器!轻松搞定跨文化沟通

大家好&#xff01;今天咱们来聊聊那些你生活中不可或缺的翻译小助手&#xff1b;不论你是个英语小白&#xff0c;还是希望更快地了解外国文献、掌握外媒信息&#xff0c;或者是从事需要大量翻译工作的小伙伴&#xff0c;总有一款翻译工具能帮你省时省力&#xff0c;让你的生活…

DBCP数据库连接池以及在Tomcat中配置JNDI数据源

前言 数据库连接 数据库连接是指在计算机系统中建立起应用程序与数据库之间的连接通道&#xff0c;用于进行数据的读取和写入操作。通过数据库连接&#xff0c;应用程序可以与数据库进行交互&#xff0c;执行各种数据库操作&#xff0c;如查询数据、插入数据、更新数据和删除数…

算法题总结(四)——螺旋矩阵

螺旋矩阵 59、螺旋矩阵二 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输…

2.点位管理开发(续)及设计思路——帝可得后台管理系统

目录 前言一、页面原型二、修改1、页面展示2、新增 3 、总结思路 前言 提示&#xff1a;本篇继续点位管理的改造 一、页面原型 页面展示新增 二、修改 1、页面展示 页面修改&#xff1a;修改标签换行、顺序顺序、地址过长时换行问题&#xff1b; <el-table v-loading…

七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)

七&#xff0c;MyBatis-Plus 扩展功能&#xff1a;乐观锁&#xff0c;代码生成器&#xff0c;执行SQL分析打印&#xff08;实操详细使用&#xff09; 文章目录 七&#xff0c;MyBatis-Plus 扩展功能&#xff1a;乐观锁&#xff0c;代码生成器&#xff0c;执行SQL分析打印&#…

愿祖国富强!肌肉水凝胶的奥秘,自协调与光驱动,运动模式大揭秘

大家好&#xff0c;在这个国庆佳节&#xff0c;我们一同感受科技的魅力。今天来了解一种特殊的肌肉样水凝胶&#xff0c;它通过自协调形状变化和摩擦调节&#xff0c;能在光的引导下实现多样运动。这一成果为软机器人发展带来新契机——《Light-steered locomotion of muscle-l…

基于ScriptableObject设计游戏数据表

前言 本篇文章是针对之前对于ScriptableObject概念讲解的实际应用之一&#xff0c;在游戏开发中&#xff0c;我们可以使用该类来设计编辑器时的可读写数据表或者运行时的只读数据表。本文将针对运行时的只读数据表的应用进行探索&#xff0c;并且结合自定义的本地持久化存储方式…

一级建造师备考攻略及一建各科老师推荐(各科四大金刚)

吐血整理:真正的实战派一建名师推荐! 考过的同学一定都知道推荐的老师YYDS! 一级建造师各科老师推荐: 《法规》名师:王欣、王竹梅、陈印、关涛 其他老师:房超、蔡恒、刘丹、武海峰、陈洁、安国庆、桂林 《管理》名师:宿吉南、龙炎飞、李向国、朱俊文 其他老师:缴广才、陈晨…

跟《经济学人》学英文:2024年09月28日这期 The curse of the Michelin star

The curse of the Michelin star Restaurants awarded the honour are more likely to close, research finds 原文&#xff1a; The twelve new restaurants added to the New York Michelin Guide this month, serving up cuisine ranging from “haute French” to “eco…

9.数据结构与算法-单链表,循环链表和双向链表的比较////顺序表和链表的比较

单链表&#xff0c;循环链表和双向链表的时间效率比较 顺序表和链表的区别 存储密度

HarmonyOS Next应用开发——自定义组件的使用

自定义组件的使用 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑与…

达梦数据库开启归档模式

目录 一、什么是归档模式&#xff1f; 二、开启归档模式的步骤 1、创建归档目录 2、进入dm数据库bin目录 3、登录数据库 4、关闭数据库 5、启动数据库到Mount状态 6、增加本地归档日志文件 7、开启归档 8、启动数据库 9、验证是否开启成功 三、开启归档模式的优…

Lj视频下载器 1.1.37 简洁高效的视频下载工具

Lj视频下载器是一个功能强大的视频下载器&#xff0c;支持直接添加视频地址或 m3u8 资源地址&#xff0c;可以从网页中自动提取视频进行下载。支持多种视频格式&#xff0c;包括 m3u8&#xff0c;并能自动检测并移除广告片段。 大小&#xff1a;19M 百度网盘&#xff1a;https…

Linux CentsOS定时删除一个目录下(包含子目录)的改动时间大于12小时的文件

Shell脚本 文件目录如下图 ** 查找/ai/img/目录下的所有文件** find /ai/img/ -type f查找/ai/img/目录下的所有上次改动时间大于720分钟(12小时)的文件 12 小时&#xff0c;也就是 720 分钟。所以&#xff0c;我们可以使用 -mmin 720 来查找修改时间超过 720 分钟&#xff08;…

uniapp 微信小程序 微信支付

本章的内容我尽量描述的细致一些&#xff0c;哪里看不懂给我评论就可以&#xff0c;我看到进行回复 微信支付大致分为4步&#xff0c;具体看后端设计 1. 获取code 2. 根据code获取openid 3. 根据openid&#xff0c;以及部分订单相关数据&#xff0c;生成prepayId (预支付交易会…

免费 Oracle 各版本 离线帮助使用和介绍

文章目录 Oracle 各版本 离线帮助使用和介绍概要在线帮助下载离线文档包&#xff1a;解压离线文档&#xff1a;访问离线文档&#xff1a;导航使用&#xff1a;目录介绍Install and Upgrade&#xff08;安装和升级&#xff09;&#xff1a;Administration&#xff08;管理&#…

交通场景多目标检测系统源码分享

交通场景多目标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Qt界面优化——绘图API

文章目录 绘图核心API绘制各种形状绘制线段绘制矩形绘制圆形绘制文本设置画笔设置画刷 绘制图片 绘图核心API Qt的各种控件&#xff0c;本质上都是画出来的&#xff0c;这不过这些都是提前画好了&#xff0c;我们拿过来直接使用即可。 实际开发中&#xff0c;可能现有控件无法…

面了智谱大模型算法岗,效率贼高!

最近这一两周不少互联网公司都已经开始秋招提前批面试了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友…