鸿蒙开发之ArkUI组件常用组件图片和文本

news/2024/5/8 17:58:27/文章来源:https://blog.csdn.net/iOSbird/article/details/137067290

ArkUI即方舟开发框架是HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

开发文档地址  : 文档中心

基本概念

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

两种开发范式

针对不同的应用场景及技术背景,方舟开发框架提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)。

  • 声明式开发范式:采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,从组件、动画和状态管理三个维度提供UI绘制能力。 
  • 类Web开发范式:采用经典的HML、CSS、JavaScript三段式开发方式,即使用HML标签文件搭建布局、使用CSS文件描述样式、使用JavaScript文件处理逻辑。该范式更符合于Web前端开发者的使用习惯,便于快速将已有的Web应用改造成方舟开发框架应用。 

在开发一款新应用时,推荐采用声明式开发范式来构建UI,主要基于以下几点考虑:

  • 开发效率:声明式开发范式更接近自然语义的编程方式,开发者可以直观地描述UI,无需关心如何实现UI绘制和渲染,开发高效简洁。 
  • 应用性能:如下图所示,两种开发范式的UI后端引擎和语言运行时是共用的,但是相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新链路更为精简,占用内存更少,应用性能更佳。 
  • 发展趋势:声明式开发范式后续会作为主推的开发范式持续演进,为开发者提供更丰富、更强大的能力。

方舟开发框架示意图:

常用的UI组件

1、Image组件

        声明Image组件并设置图片源

                Image(src:string|PixelMap|Resource        

        ① string格式,通常用来加载网络图片,需要申请网络访问权限:ohos.permission.INTERNET

                Image('https://xxxxx.png')

        ② PixelMap格式,以加载像素图,常用在图片编辑中

                Image(pixelMapObject)

        ③ Resource格式,加载本地图片

                Image($r('app.media.icon'))

                Image($rowfile('icon.png'))

              使用$rowfile  得到的icon图片放在了rawfile里面         

              使用$r 得到的图片在media文件夹下

    

图片属性: width() 高度  ,height()宽度 , borderRadius() 边框圆角 , interpolation()图片插值(弥补像素锯齿)

 Image($rawfile('car.png')).backgroundColor('#fff000').width(200) //宽度.borderRadius(50) //圆角 
Image('http://t14.baidu.com/it/u=3542627100,2757422516&fm=224&app=112&f=JPEG?w=363&h=500').height(300)

效果图  

这是在预览器上显示的,网络图片如果要显示在模拟器或者真机上,需要申请网络权限

官网地址 文档中心

在工程目录中找到如果所示的module.json5文件添加网络权限

这样我们就可以在模拟器和真机上显示网络图片了。

2、文本组件 Text/Span

Text是文本组件,通常用于展示用户的视图,如显示文章的文字。

声明Text组件并设置文本内容

                                Text(content?:string|Resource)

①string格式,直接填写文本内容    Text("文本content")

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

                Text($r('app.string.tab_Home'))  //读取tab的首页文本,对应中英文,实现国际化

文本属性  

  lineHeight()行高   fontSize()字体大小    fontColor()字体颜色  fontWeight()字体粗细 padding()内间距,margin()外边距

Text($r('app.string.module_desc')).baselineOffset(0).fontSize(30).border({ width: 1 }).padding(10).width(300).margin(20)
添加子组件

Span只能作为Text组件的子组件显示文本内容。可以在一个Text内添加多个Span来显示一段信息,例如产品说明书、承诺书等。

Span组件需要写到Text组件内,单独写Span组件不会显示信息,Text与Span同时配置文本内容时,Span内容覆盖Text内容。

创建Span

Text('我是Text') {Span('我是Span')}.padding(10).borderWidth(1).margin(30)

设置文本装饰线及颜色 , 通过decoration设置文本装饰线及颜色。

Text() {Span('我是Span1,').fontSize(16).fontColor(Color.Grey).decoration({ type: TextDecorationType.LineThrough, color: Color.Red })Span('我是Span2').fontColor(Color.Blue).fontSize(16).fontStyle(FontStyle.Italic).decoration({ type: TextDecorationType.Underline, color: Color.Black })Span(',我是Span3').fontSize(16).fontColor(Color.Grey).decoration({ type: TextDecorationType.Overline, color: Color.Green })}.borderWidth(1).padding(10).margin(30)

通过TextCase设置文字一直保持大写或者小写状态

Text() {Span('I am Upper-span').fontSize(12).textCase(TextCase.UpperCase)
}

这样文本的字体都是大写的

添加事件

由于Span组件无尺寸信息,事件仅支持点击事件onClick。

Text() {Span('I am Upper-span').fontSize(12).textCase(TextCase.UpperCase).onClick(()=>{console.info('Span点击了!!!')})}.margin(40)

这样点击span会有点击事件的响应

自定义组件
①通过textAlign属性设置文本对齐样式
Text('左对齐').width(300).textAlign(TextAlign.Start).border({ width: 1 }).padding(10)
Text('中间对齐').width(300).textAlign(TextAlign.Center).border({ width: 1 }).padding(10)
Text('右对齐').width(300).textAlign(TextAlign.End).border({ width: 1 }).padding(10)
TextAlign是枚举,有Start、Center、End
②通过textOverflow属性控制文本超长处理

textOverflow需配合maxLines一起使用(默认情况下文本自动折行)。

    Text('This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content. This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content.').width(250).textOverflow({ overflow: TextOverflow.None }).maxLines(1).fontSize(12).border({ width: 1 }).padding(10)Text('我是超长文本,超出的部分显示省略号。I am an extra long text, with ellipses displayed for any excess。').width(250).textOverflow({ overflow: TextOverflow.Ellipsis }).maxLines(1).fontSize(12).border({ width: 1 }).padding(10)

TextOverflow是枚举,有Clip裁切  Ellipsis省略号 None不裁切

  如果去掉maxLines文本会自动折行

  ③通过lineHeight属性设置文本行高
Text('This is the text with the line height set. This is the text with the line height set.').width(300).fontSize(12).border({ width: 1 }).padding(10)
Text('This is the text with the line height set. This is the text with the line height set.').width(300).fontSize(12).border({ width: 1 }).padding(10).lineHeight(20)
    
④通过decoration属性设置文本装饰线样式及其颜色
Text('This is the text').decoration({type: TextDecorationType.LineThrough,color: Color.Red}).borderWidth(1).padding(10).margin(5)
Text('This is the text').decoration({type: TextDecorationType.Overline,color: Color.Red}).borderWidth(1).padding(10).margin(5)
Text('This is the text').decoration({type: TextDecorationType.Underline,color: Color.Red}).borderWidth(1).padding(10).margin(5)

⑤通过baselineOffset属性设置文本基线的偏移量
Text('This is the text content with baselineOffset 0.').baselineOffset(0).fontSize(12).border({ width: 1 }).padding(10).width('100%').margin(5)
Text('This is the text content with baselineOffset 30.').baselineOffset(30).fontSize(12).border({ width: 1 }).padding(10).width('100%').margin(5)Text('This is the text content with baselineOffset -20.').baselineOffset(-20).fontSize(12).border({ width: 1 }).padding(10).width('100%').margin(5)

⑥通过letterSpacing属性设置文本字符间距
Text('This is the text content with letterSpacing 0.').letterSpacing(0).fontSize(12).border({ width: 1 }).padding(10).width('100%').margin(5)
Text('This is the text content with letterSpacing 3.').letterSpacing(3).fontSize(12).border({ width: 1 }).padding(10).width('100%').margin(5)
Text('This is the text content with letterSpacing -1.').letterSpacing(-1).fontSize(12).border({ width: 1 }).padding(10).width('100%').margin(5)

⑦通过minFontSize与maxFontSize自适应字体大小
Text('我的最大字号为30,最小字号为5,宽度为250,maxLines为1').width(250).maxLines(1).maxFontSize(30).minFontSize(5).border({ width: 1 }).padding(10).margin(5)
Text('我的最大字号为30,最小字号为5,宽度为250,maxLines为2').width(250).maxLines(2).maxFontSize(30).minFontSize(5).border({ width: 1 }).padding(10).margin(5)
Text('我的最大字号为30,最小字号为15,宽度为250,高度为50').width(250).height(50).maxFontSize(30).minFontSize(15).border({ width: 1 }).padding(10).margin(5)
Text('我的最大字号为30,最小字号为15,宽度为250,高度为100').width(250).height(100).maxFontSize(30).minFontSize(15).border({ width: 1 }).padding(10).margin(5)
⑧通过textCase属性设置文本大小写
Text('This is the text content with textCase set to Normal.').textCase(TextCase.Normal).padding(10).border({ width: 1 }).padding(10).margin(5)// 文本全小写展示
Text('This is the text content with textCase set to LowerCase.').textCase(TextCase.LowerCase).border({ width: 1 }).padding(10).margin(5)// 文本全大写展示
Text('This is the text content with textCase set to UpperCase.').textCase(TextCase.UpperCase).border({ width: 1 }).padding(10).margin(5)
⑨通过copyOption属性设置文本是否可复制粘贴
Text("这是一段可复制文本").fontSize(30).copyOption(CopyOptions.InApp)

CopyOptions是枚举有none不允许拷贝,InApp只允许在app内 ,LocationDevice 本地设备
添加事件

Text组件可以添加通用事件,可以绑定onClick、onTouch等事件来响应操作。

 Text("这个文本可点击").fontSize(30).onClick(()=>{console.log("点击的这个文本")})

 

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

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

相关文章

国产数据库中统计信息自动更新机制

数据库中统计信息描述的数据库中表和索引的大小数以及数据分布状况,统计信息的准确性对优化器选择执行计划时具有重要的参考意义。本文简要整理了下传统数据库和国产数据库中统计信息的自动更新机制,以加深了解。 1、数据库统计信息介绍 优化器是数据库…

20240319-图论

图论练习题目 拓扑排序深度优先搜索方法广度优先搜索方法 无向无权图无向有权图有向无权图 利用广度优先搜索算法有向有权图 带排序的广度优先算法/dijkstra最小生成树prims算法Kruskals Algorithm 最小割 min-cut二分图 Bipartite Graph 队列例题1 所有可能的路径例题2 岛屿数…

思腾合力受邀出席文化和旅游虚拟现实应用推广交流活动并作主题演讲

3月21日,由文化和旅游部产业发展司主办,中国信息通信研究院、北京市石景山区文化和旅游局、中国动漫集团有限公司承办的“数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动”在北京首钢一高炉SoReal科幻乐园成功举办。 思腾合力CMO徐莉受…

unity学习(71)——编译游戏发生错误3——回调问题——必须使用mapHandker的update

move这种一直发送的,第一次写,之前的数据包收发都是一次性的来完成单次任务! 1.服务器最后一次出问题时的调试状态如下: 2.定位代码如下 可见确实LogicHandler了,也确实直行到119行的位置了 3.修改catch&#xff0c…

GPT提示词分享 —— 写作标题生成器

我想让你充当书面作品的标题生成器。我将向你提供一篇文章的主题和关键词,你将生成五个吸引人的标题。请保持标题简洁,不超过 20 个字,并确保保持其含义。答复时要利用题目的语言类型。我的第一个题目是 [文章内容] 3.5的回答👇fr…

C++第十三弹---内存管理(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、operator new与operator delete函数 1.1、operator new与operator delete函数 2、new和delete的实现原理 2.1、内置类型 2.2、自定义类型 …

HTTP系列之HTTP缓存 —— 强缓存和协商缓存

文章目录 HTTP缓存强缓存协商缓存状态码区别缓存优先级如何设置强缓存和协商缓存使用场景 HTTP缓存 HTTP缓存时利用HTTP响应头将所请求的资源在浏览器进行缓存,缓存方式分两种:强缓存和协商缓存。 浏览器缓存是指将之前请求过的资源在浏览器进行缓存&am…

Qt creator构建DLL库

文章目录 一、构建DLL库二、隐式调用DLL库 一、构建DLL库 Qt creator创建DLL项目。 实现功能函数。 运行代码,debug目录下会有.dll和.lib文件。 二、隐式调用DLL库 QT新建控制台项目。将.lib文件和与之关联的头文件赋值到项目文件夹。 3. 添加头文件和外部依赖库…

数据可视化-ECharts Html项目实战(6)

在之前的文章中,我们学习了如何设置散点图、雷达图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢数据可视化-ECharts Html项目实战(5&a…

【数据分析面试】2.连续访问最长天数用户(SQL)

题目 给定一个包含事件日志的表格,找出连续访问平台时间最长的前五个用户。 注意:连续访问是指用户在连续的几天内每天至少访问一次平台。 示例: 输入: events 表 ColumnTypeuser_idINTEGERcreated_atDATETIMEurlVARCHAR 输…

学习人工智能:Attention Is All You Need-2-Transformer模型;Attention机制;位置编码

3.2 注意力机制Attention 注意力函数可以描述为将查询和一组键值对映射到输出的过程,其中查询、键、值和输出都是向量。输出被计算为值的加权和,其中每个值的权重由查询与相应键的兼容性函数计算得出。 3.2.1 缩放点积注意力 Scaled Dot-Product Attenti…

Python——jieba优秀的中文分词库(基础知识+实例)

Hello,World! 从去年开始学习Python,在长久的学习过程中,发现了许多有趣的知识,不断充实自己。今天我所写的内容也是极具趣味性,关于优秀的中文分词库——jieba库。 🏔关于Jieba 🐒…

BUG定位---一起学习吧之测试

判断一个BUG是前端还是后端的,通常需要根据BUG的具体表现、发生的环境以及相关的技术栈来进行分析。以下是一些常用的判断方法: 错误发生的位置: 如果BUG涉及的是页面的布局、样式、交互效果等,那么很可能是前端的BUG。如果BUG与…

鸿蒙HarmonyOS应用开发之NDK工程构建概述

OpenHarmony NDK默认使用CMake作为构建系统,随包提供了符合OpenHarmony工具链的基础配置文件 ohos.toolchain.cmake ,用于预定义CMake变量来简化开发者配置。 常用的NDK工程构建方式有: 从源码构建 源码构建也有不同方式: 可以使…

29---Nor Flash电路设计

视频链接 Nor Flash硬件电路设计01_哔哩哔哩_bilibili NOR FLASH电路设计 1、NOR FLASH介绍 NOR Flash最早是由Intel公司于1988年开发出的。 NOR Flash虽容量小但速度快,最大特点是支持芯片内执行(XIP),即程序可以直接在NOR flash的片内…

Spring Cloud Gateway Server MVC

之前你如果要用spring cloud gateway ,就必须是webflux 的,也就是必须是异步响应式编程。不能和spring mvc 一起使用。现在spring cloud 新出了一个可以不用webflux的gateway。 具体使用mvc的gateway步骤如下 普通的Eureka Client的项目 如果你只是想测…

前端Webpack5高级进阶课程

课程介绍 本套视频教程主要内容包含React/Vue最新版本脚手架分析、基于Webpack5编写自己的loader和plugin等,让你开发时选择更多样,最后,用不到一百行的代码实现Webpack打包。通过本套视频教程的学习,可以帮你彻底打通Webpack的任…

CCleaner2024最新版本win系统清理工具功能介绍及下载

CCleaner是一款在计算机领域广受欢迎的系统清理和优化工具。它以其强大的功能、简洁的操作界面和显著的效果,赢得了众多用户的青睐。下面,我将从功能、特点、使用方法以及优势等方面对CCleaner进行详细介绍。 CCleaner下载如下: https://wm.…

一题学会BFS和DFS,手撕不再怕

先复习一下什么是BFS和DFS,各位读者接着往下看就行 BFS算法 BFS类似于树的层次遍历过程,从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。 舍去空间换时间。 算法思路队列(先进先出) 1…

红外遥控器的使用和详细解释

infrared.c #include "infrared.h"/* 红外 --- PA8*/void Infrared_Init(void) {GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//使能SYSCFG时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, E…