鸿蒙开发:从入门到实战!

一,默认模版中是容器Row或者Column中添加一个Text文本,我们可以尝试一下修改它的内容和样式,对UI语法有一个初体验:

   // 文本内容        Text("沉默的闪客")          // 字体大小          .fontSize(50)          //背景色          .backgroundColor(Color.Green)           // 字体粗细          .fontWeight(FontWeight.Bold)          //字体颜色          .fontColor(Color.Red)          //对齐方式          .textAlign(TextAlign.Start)          //宽度          .width(100)          //高度          .height(100)          //外边距          .margin({left:10})          //内边距          .padding({top:10})          // 内容边框          .border({ width: 1 })          // 设置文本超长时的显示方式          .textOverflow({ overflow: TextOverflow.Clip })          // 设置文本的最大行数          .maxLines(1)          // 设置文本字符间距          .letterSpacing(3)          // 文本基线偏移          .baselineOffset(0)          // 文本大小写展示          .textCase(TextCase.LowerCase)          // 设置文本装饰线样式及其颜色          .decoration({             type: TextDecorationType.LineThrough,             color: Color.Red        })

以上就是一个文本组件Text常用的一些设置,如果不知道是什么或者不知道都有什么,可以通过DevEco编译器里面的代码提示,组件后面添加英文点儿一下就能看到,大家可以按需选择,也可以多多尝试,其他组件通用。

二,如果上面的Text 看起来不尽兴,再来一个Image组件的内容和样式:

// 加载图片Image($r('app.media.ic_camera_master_ai_leaf'))   // 宽  .width(110)  // 高  .height(110)  // 外边距  .margin(15)  // 使用alt,在网络图片加载成功前使用占位图  .alt($r('app.media.icon'))  // 设置图片的填充效果  .objectFit(ImageFit.Cover)  .onClick(() => {  })  .onFinish(() => {  })  // 图片加载完成后,获取图片尺寸。  .onComplete((msg: { width: number,height: number }) => {    this.widthValue = msg.width    this.heightValue = msg.height  })  // 图像像素大小  .sourceSize({    width: 900,    height: 900  })  // Overlay 侧边栏浮在内容区上面  .overlay('png', { align: Alignment.Bottom  , offset: { x: 0, y: 20 } })

三,Button 按钮组件,可快速创建不同样式的按钮,同时可以在内部添加文本和进度效果。


// type: ButtonType.Normal 属性是按钮类型 包括,胶囊,原型和普通三种
Button('OK', { type: ButtonType.Normal, stateEffect: true })
   // 圆角
  .borderRadius(8)
  // 背景颜色
  .backgroundColor(0x317aff)
  // 宽
  .width(90)
  .onClick(() => {
    console.log('ButtonType.Normal')
  })
Button({ type: ButtonType.Normal, stateEffect: true }) {
  // 按钮上添加进度条和文本
  Row() {
    LoadingProgress()
    .width(20)
    .height(20)
    .margin({ left: 12 })
    .color(0xFFFFFF)
    Text('loading')
    .fontSize(12)
    .fontColor(0xffffff)
    .margin({ left: 5, right: 12 })
  }
  .alignItems(VerticalAlign.Center)
}
.borderRadius(8)
.backgroundColor(0x317aff)
.width(90)
.height(40)

Button('Disable', { type: ButtonType.Normal, stateEffect: false })
// 透明度
.opacity(0.4)
.borderRadius(8)
.backgroundColor(0x317aff)
.width(90)

上面说的都是基础组件,用来显示界面中的每一个效果的显示。

下面来说说容器组件,容器组件是包含基础组件实现界面的显示:

List是列表组件,用于展示列表数据,是容器布局中的重要组件,列表由多个ListItem构成。


// space:行间距
List({ space: 20, initialIndex: 0 }) {
  ForEach(this.arr, (item) => {
   // item
    ListItem() {
      Text('' + item)
        .width('100%').height(100).fontSize(16)
        .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
    }
  }, item => item)
}
.listDirection(Axis.Vertical) // 排列方向
.divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
.edgeEffect(EdgeEffect.Spring) // 滑动到边缘无效果
.onScrollIndex((firstIndex: number, lastIndex: number) => {
  console.info('first' + firstIndex)
  console.info('last' + lastIndex)
})
.width('90%')

类似的容器组件 还有 Grid,Scroll 组件,组件的用法都大同小异,不再一一叙述,后面实战使用更高效,接下来要说一说基本的布局。

布局无非就是水平排列、竖向排列,层叠排列和弹性布局,由他们又繁衍出了各种各样的排列组合方式。下面进行一一讲述:

Row:横向排列,Row容器内子元素按照水平方向排列,可以包含所有基础组件。


Row() {
  Text('闪客1').width(110).height(50).textAlign(TextAlign.Center).backgroundColor('#e1e1e1')
  Image($r('app.media.icon')).width(50)
  Text('闪客3').width(110).height(50).textAlign(TextAlign.Center).backgroundColor('#ff96eeac')
  Text('闪客4').width(110).height(50).textAlign(TextAlign.Center).backgroundColor('#ffde6e6e')
}
.height('100%')

Column:竖向排列。Column容器内子元素按照垂直方向排列, 可以包含所有基础组件。

 Column() {
    Text('闪客1').width(110).height(50).width('100%').textAlign(TextAlign.Center).backgroundColor('#e1e1e1')
    Image($r('app.media.icon')).width(50)
    Text('闪客3').width(110).height(50).width('100%').textAlign(TextAlign.Center).backgroundColor('#ff96eeac')
    Text('闪客4').width(110).height(50).width('100%').textAlign(TextAlign.Center).backgroundColor('#ffde6e6e')
  }
  .justifyContent(FlexAlign.Center) // 竖直居中
  .height('100%')

Stack:层叠布局。容器内子元素的位置可以重叠,可以按照层次添加,可以把组件覆盖到另一个组件之上。

Stack() {
  Text('灰色闪客1').width(110).height(250).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#e1e1e1')
  Image($r('app.media.icon')).width(50)
  Text('绿色闪客3').width(110).height(150).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#ff96eeac')
  Text('红色闪客4').width(110).height(50).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#ffde6e6e')
}
.height('100%')

Flex:弹性布局,以弹性方式布局子组件的容器组件,有效的对容器中的子元素进行排列、对齐和分配剩余空间, 使用Flex可以同时支持横向布局和纵向布局:

Flex({ direction: FlexDirection.Row }) { // 子组件在容器主轴上布局
  Text('灰色闪客1').width(110).height(250).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#e1e1e1')
  Image($r('app.media.icon')).width(50)
  Text('绿色闪客3').width(110).height(150).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#ff96eeac')
  Text('红色闪客4').width(110).height(50).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#ffde6e6e')
}
.height('100%')

垂直布局:

Flex({ direction: FlexDirection.Column }) { // 子组件在容器主轴上布局
  Text('灰色闪客1').width(110).height(250).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#e1e1e1')
  Image($r('app.media.icon')).width(50)
  Text('绿色闪客3').width(110).height(150).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#ff96eeac')
  Text('红色闪客4').width(110).height(50).width('100%')
    .textAlign(TextAlign.Center).backgroundColor('#ffde6e6e')
}
.height('100%')

上面说了很多,都是基础的开发,组件,容器,做界面妥妥的,为了能够尽快熟悉,下面来一个登记界面的开发吧,再次熟悉熟悉开发的乐趣。

先来看登记界:

从整理布局来看是竖直布局,最外层使用Colomn容器或者Flex容器。

1,先来实现头部的图片显示


Image($r('app.media.ic_login'))
.width(130).height(60)  // 设置宽高
.margin({ top: 50, bottom: 70 }) //设置内边距 顶部和底部

2,再来实现下面的输入框,鸿蒙有TextInput组件可以实现输入操作


// 默认信息和输入信息
TextInput({ placeholder: '请输入账号', text: this.account })
  .type(InputType.Normal) // 输入类型
  .placeholderColor(Color.Gray) // 默认信息颜色
  .placeholderFont({ size: 15, weight: 2 }) // 默认信息的大小和权重
  .height(45)
  .onChange((value: string) => {

  })

3,再来实现下面的按钮,按钮使用上面说的Button来实现,按钮可以直接添加文本,也可以在内部添加文本组件。


Button() {
  Text('登录')
    .textAlign(TextAlign.Center)
    .width('100%')
    .fontSize(15)
    .fontColor(Color.White)
}.height(38)
.margin({ top: 20 })
.enabled(this.isEnableLogin)
.backgroundColor(this.isEnableLogin ? '#d81e06' : '#F9A3A1')
.onClick(()=>{
  this.login()
})

4,最先的注册和忘记密码,两个看成一个整体 通过 水平容器Row来实现,每一个是一个文本 使用Text来实现。

Row() {
  Text('账号注册')
    .fontSize(12)
    .padding(10)
  Blank() // 填充内部剩余空间,让两端的组件靠近边框
  Text('忘记密码?')
    .fontSize(12)
    .padding(10)
}.width('100%')

因为注册和忘记密码文本在两端,可以使用布局属性也可以使用Blank来实现,占用空余布局。

上面几部分完成 就成功的组成一个登录界面,当然还需要有一些点击操作和输入框文本变化监听,才是一个完整的登录功能页面。

最后

如果你想成为一名鸿蒙开发者,以下这些资料将是十分优质且有价值,让你的鸿蒙开发之路事半功倍!相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。

内容包含了:【OpenHarmony多媒体技术、Stage模型、ArkUI多端部署、分布式应用开发、音频、视频、WebGL、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

鸿蒙Next全套VIP学习资料←点击领取!(安全链接,放心点击

1.鸿蒙核心技术学习路线

2.大厂面试必问面试题

3.鸿蒙南向开发技术

 4.鸿蒙APP开发必备

 5.HarmonyOS Next 最新全套视频教程

 6.鸿蒙生态应用开发白皮书V2.0PDF

这份全套完整版的学习资料已经全部打包好,朋友们如果需要可以点击→鸿蒙Next全套VIP学习资料:免费领取(安全链接,放心点击

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

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

相关文章

VS-qt中运行程序时报错:fatal error RC1015:cannot open include file ‘afxres.h‘

开发环境:VS2015 qt5.12.10 点击运行时报错如下: 搜索了下afxres.h文件,发现位置如下: 看样子是VS中少安装了部分模块导致的,,看了同事的电脑,该文件应该是在以下目录中的: 所…

从零开始:如何在直播应用中集成美颜SDK和美颜插件

本篇文章,小编将详细介绍如何从零开始,在直播应用中集成美颜SDK和美颜插件。 一、准备工作 确定需求 在开始集成美颜SDK之前,首先需要明确需求。考虑以下几个问题: 直播应用的目标用户是谁? 需要集成哪些美颜功能&…

gbase 扩容 集群数据同步 主备切换

问题: 问题1磁盘满 1.原本是100G的大小,我们实际还没接入真正业务,昨日空间满了,需要帮忙看下是什么原因导致磁盘满的吗 数据库是每天备份一次,是不是备份的太频繁,还是数据量的问题导致,需要…

Apache Doris 基础 -- 数据表设计(模式更改)

用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改,可以查看数据表设计/表索引,查看每个索引的更改方法。 1、术语 基本表(Base Ta…

Python 快速查找并替换Excel中的数据

Excel中的查找替换是一个非常实用的功能,能够帮助用户快速完成大量数据的整理和处理工作,避免手动逐一修改数据的麻烦,提高工作效率。要使用Python实现这一功能, 我们可以借助Spire.XLS for Python 库,具体操作如下&am…

SuperPanel不只是母排设计软件,还是母排管理软件!

盘厂的铜排成本约有20%,以1亿产值客户为例,约有2000万的铜排成本。 铜价不断高涨,有效的管理铜排,可以达到节约母排,精准报价,精准确定采购时间,减少资金占用等效果。 盘厂铜排管理现状 01 只…

图的相关种类

目录 数据类型 存储结构 邻接矩阵表示法 无向图 邻接矩阵表示 有向图 网 实现 邻接矩阵表示 存储结构 创建无向图 优点 缺点 邻接表法表示 表示无向图 表示有向图 存储结构 无向网 特点 十字链表与多重表 十字链表 存储结构 多重表 存储结构 数据类型 存…

python-找素数

[题目描述] 小明刚刚学习了素数的概念:如果一个大于 11 的正整数,除了 11 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 A 和 B 之间(包括 A 和 B)有多少个…

软件管理、rpm安装、yum安装、源码编译安装

目录 一、Windows安装/卸载 二、软件的卸载: 三、Linux的软件安装和卸载 3.1rpm安装 第一步:挂在光盘 第二步:查看/mnt 第三步:切换到/mnt/Packages 第四步:安装 3.2yum安装(使用关盘作为yum源&…

UDP协议在物联网中的实战

一、UDP协议介绍 UDP(User Datagram Protocol, 用户数据报协议),无连接的传输层协议,提供面向事务的简单不可靠信息传输服务。强调传输性能而不是传输完整性,多用于视频和多媒体应用。 2.1 报文格式 2.2 协议特点 无连接:不可靠传…

LangChain开发【NL2SQL】应用(few-shot优化)

前言 之前发布的博客LangGraph开发Agent智能体应用【NL2SQL】-CSDN博客,留了一个问题,对于相对复杂的sql(leetcode中等难度的sql题),gpt4o就力不从心了。这篇文章来讲一下优化 什么是few-shot 使用这些少量的、调整…

MI-SegNet: 基于互信息的超越领域泛化的超声图像分割

文章目录 MI-SegNet: Mutual Information-Based US Segmentation for Unseen Domain Generalization摘要方法实验结果 MI-SegNet: Mutual Information-Based US Segmentation for Unseen Domain Generalization 摘要 针对医学图像分割在不同领域间泛化能力有限的问题,特别是针…

【uniapp】带圆角渐变边框实现

1. 效果图 2. 代码实现 <image class"item-left-img" :src"url" mode"aspectFill" />.item-left-img {width: 240rpx;height: 320rpx;border: 6rpx solid transparent;background-clip: padding-box, border-box;background-origin: padd…

Magnet pro for mac v2.14.0中文激活版:高效窗口管理工具

Magnet for Mac是一款专为Mac用户设计的窗口管理工具&#xff0c;旨在帮助用户更高效地管理和布局多个应用程序窗口&#xff0c;提升工作效率。 Magnet pro for mac v2.14.0中文激活版下载 这款软件拥有直观易用的界面和丰富的功能&#xff0c;支持用户将屏幕分割成多个区域&a…

浅浅写一个Word、PowerPoint、Excel文档转PDF工具

前言 最近在搞知识库&#xff0c;需要把各种 Word、PowerPoint、Excel 文件转换成 PDF 文件&#xff0c;不然 Word 中的表格中的文字提取会出现一些问题&#xff1b;使用 Office 或者 WPS 将大量文件转换成 PDF 需要频繁重复打开文件&#xff0c;点击保存为PDF&#xff0c;然后…

yg校园易购电商系统(Go+Vue)

校园易购二手平台系统 GitHub项目地址&#xff1a;https://github.com/xzhHas/yg 文章目录 校园易购二手平台系统一、技术栈简介二、快速开始1、安装本系统使用到的插件&#xff0c;这里推荐使用docker安装&#xff0c;此操作皆在ubuntu系统下操作&#xff0c;如果是其他系统只…

5. MySQL 运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…

NXdfefefef

prototype&#xff1a;原型 CORS(Cross-Origin Resource Sharing):跨资源共享 Interceptor&#xff1a;拦截器 BOM&#xff1a;Browser Object Module(浏览器对象模型) Ajax(Asynchronous Javascript And XML)&#xff1a;异步的JavaScript和XML&#xff0c;Ajax其实就是浏览器…

Next.js Tailwind CSS UI组件

摘要&#xff1a; 官网 今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件&#xff01;这从头构建一个AI驱动的前端UI组件生成器&#xff0c;生成Next.js Tailwind CSS UI组件&#xff1a; 1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。 2、用Copi…

从云端到终端:青犀视频汇聚/融合平台的视频接入方式与场景应用

一、青犀视频汇聚/融合平台 由TSINGSEE青犀视频研发的EasyCVR智能融合/视频汇聚平台基于“云-边-端”一体化架构&#xff0c;支持视频汇聚、融合管理&#xff0c;兼容多协议&#xff08;GA/T1400/GB28181/Onvif/RTSP/RTMP/海康SDK/Ehome/大华SDK/宇视SDK等&#xff09;、多类型…