首页 > 其他分享 >鸿蒙开发学习(二)之ArkUI

鸿蒙开发学习(二)之ArkUI

时间:2023-11-15 10:56:34浏览次数:40  
标签:容器 鸿蒙 布局 学习 UI 组件 router ArkUI 页面

目录

UI开发

方舟开发框架(简称:ArkUI),是一套构建HarmonyOS应用界面的UI开发框架,它提供了极简的UI语法与包括UI组件、动画机制、事件交互等在内的UI开发基础设施,以满足应用开发者的可视化界面开发需求。

布局

在声明式UI中,所有的页面都是由自定义组件构成,在实际的开发过程中,需要遵守以下流程保证整体的布局效果:

  • 确定页面的布局结构。
  • 分析页面中的元素构成。
  • 选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。

image.png

通过displayPriority属性来控制页面的显示和隐藏

布局选择

布局 应用场景
线性布局(Row、Column) 如果布局内子元素超过1个,且能够以某种方式线性排列时优先考虑此布局。
层叠布局(Stack) 组件需要有堆叠效果时优先考虑此布局,层叠布局的堆叠效果不会占用或影响其他同容器内子组件的布局空间。例如Panel作为子组件弹出时将其他组件覆盖更为合理,则优先考虑在外层使用堆叠布局。
弹性布局(Flex) 弹性布局是与线性布局类似的布局方式。区别在于弹性布局默认能够使子组件压缩或拉伸。在子组件需要计算拉伸或压缩比例时优先使用此布局,可使得多个容器内子组件能有更好的视觉上的填充容器效果。
相对布局(RelativeContainer) 相对布局是在二维空间中的布局方式,不需要遵循线性布局的规则,布局方式更为自由。通过在子组件上设置锚点规则(AlignRules)使子组件能够将自己在横轴、纵轴中的位置与容器或容器内其他子组件的位置对齐。设置的锚点规则可以天然支持子元素压缩、拉伸,堆叠或形成多行效果。在页面元素分布复杂或通过线性布局会使容器嵌套层数过深时推荐使用。

布局位置

position、offset等属性影响了布局容器相对于自身或其他组件的位置。

定位能力 使用场景 实现方式
绝对定位 对于不同尺寸的设备,使用绝对定位的适应性会比较差,在屏幕的适配上有缺陷。 使用position实现绝对定位,设置元素左上角相对于父容器左上角偏移位置。在布局容器中,设置该属性不影响父容器布局,仅在绘制时进行位置调整。
相对定位 相对定位不脱离文档流,即原位置依然保留,不影响元素本身的特性,仅相对于原位置进行偏移。 使用offset可以实现相对定位,设置元素相对于自身的偏移量。设置该属性,不影响父容器布局,仅在绘制时进行位置调整。

组件

容器组件

对于支持子组件配置的组件,例如容器组件,在"{ ... }"里为组件添加子组件的UI描述。Column、Row、Stack、Grid、List等组件都是容器组件。

  • 以下是简单的Column示例:
Column() {
    Text('Hello')
        .fontSize(100)
    Divider()
    Text(this.myText)
        .fontSize(100)
        .fontColor(Color.Red)
}

row、column

线性布局(Row/Column)-快速入门-入门-HarmonyOS应用开发

属性名称 描述
justifyContent 设置子组件在主轴方向上的对齐格式。
alignItems 设置子组件在交叉轴方向上的对齐格式。
  • 子组件在主轴方向上的对齐使用justifyContent属性来设置,其参数类型是FlexAlign。FlexAlign定义了以下几种类型:Start、SpaceBetween、SpaceAround、SpaceEvenly等等
  • Column和Row容器的接口都有一个可选参数space,表示子组件在主轴方向上的间距。

列表

<HarmonyOS第一课>从简单的页面开始-华为开发者学堂
性能提升的推荐方法-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发

List是很常用的滚动类容器组件,一般和子组件ListItem一起使用,List列表中的每一个列表项对应一个ListItem组件。
使用ForEach组件

@Entry
@Component
struct ListDemo {
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  build() {
    Column() {
      List({ space: 10 }) {
        ForEach(this.arr, (item: number) => {
          ListItem() {
            Text(`${item}`)
              .width('100%')
              .height(100)
              .fontSize(20)
              .fontColor(Color.White)
              .textAlign(TextAlign.Center)
              .borderRadius(10)
              .backgroundColor(0x007DFF)
          }
        }, item => item)
      }
    }
    .padding(12)
    .height('100%')
    .backgroundColor(0xF1F3F5)
  }
}

Tabs

<HarmonyOS第一课>从简单的页面开始-华为开发者学堂

常用子组件

<HarmonyOS第一课>从简单的页面开始-华为开发者学堂

Text组件用于在界面上展示一段文本信息,可以包含子组件Span。
fontSize:设置文本尺寸,Length为number类型时,使用fp单位

Image($r("app.media.image2"))
  .objectFit(ImageFit.Cover)
  .backgroundColor(0xCCCCCC)
  .width(100)
  .height(100)
Image('https://www.example.com/xxx.png')

为了成功加载网络图片,您需要在module.json5文件中申明网络访问权限。

{
    "module" : {
        "requestPermissions":[
           {
             "name": "ohos.permission.INTERNET"
           }
        ]
    }
}

在Button组件通过“$r('app.type.name')”的形式引用应用资源。app代表应用内resources目录中定义的资源;type代表资源类型(或资源的存放位置),可以取“color”、“float”、“string”、“plural”、“media”;name代表资源命名,由开发者定义资源时确定。

Button($r('app.string.login_text'), { type: ButtonType.Capsule })
  .width($r('app.float.button_width'))
  .height($r('app.float.button_height'))
  .fontSize($r('app.float.login_fontSize'))
  .backgroundColor($r('app.color.button_color'))

页面路由

@ohos.router (页面路由)-UI界面-接口参考(ArkTS及JS API)-手机、平板、智慧屏和智能穿戴开发-ArkTS API参考-HarmonyOS应用开发

import router from '@ohos.router'

router.push 跳转到应用内的指定页面。

router.push({
  url: 'pages/routerpage2',
  params: {
    data1: 'message',
    data2: {
      data3: [123, 456, 789]
    },
  },
});

router.replace 用应用内的某个页面替换当前页面,并销毁被替换的页面。

router.replace({
  url: 'pages/detail',
  params: {
    data1: 'message',
  },
});

router.back

router.back({url:'pages/detail'});
router.clear();
var size = router.getLength();

标签:容器,鸿蒙,布局,学习,UI,组件,router,ArkUI,页面
From: https://www.cnblogs.com/sixrain/p/17833335.html

相关文章

  • Python+PlayWright+ Pytest + Allure 自动化学习路线
    前言对于自己写过文章的总结,并不代表最好的学习路线还未完结,努力更新中ing建议把每节的实战演练做一下 PlayWrightPlayWright-环境安装PlayWright-如何使用playwrighPlayWrigh-同步和异步运行PlayWright-深入异步PlayWright-元素定位PlayWright-文本输......
  • 数据结构——字典树 学习笔记
    数据结构——字典树学习笔记字典树,也叫trie树。检索字符串本质是记录字符串前缀的一棵查找树,形态类似于:字典树使用边表示字母,节点表示一个前缀,同时也可以在节点上记录状态\(\mathit{tag}\)。基本实现形如:var: nex[0..siz][0..rng],idx est[0..siz],pre[0..siz]fun......
  • 偏序问题学习笔记
    前提给若干个\(n\)维的点,对于每个点求出每一维均小于等于它的点的数量。按字典序排序,然后预处理相同的点,这样后面的点不可能对前面的点产生贡献。如果某个点后面有与其相同的点,那么当前点的贡献就会少算,所以我们需要提前在当前点的答案中加上后面与其相同的点的数量。经过这......
  • Python+PlayWright+ Pytest + Allure 自动化学习路线
    前言对于自己写过文章的总结,并不代表最好的学习路线还未完结,努力更新中ing建议把每节的实战演练做一下 PlayWrightPlayWright-环境安装PlayWright-如何使用playwrighPlayWrigh-同步和异步运行PlayWright-深入异步PlayWright-元素定位PlayWright-文本输......
  • Python学习一基础语法3——input的应用和注释
    #语法结构:input("提示信息")提示信息是告诉用户需要你做什么name=input("请输入您的姓名:")print('您的姓名是:'+name)num=input('请输入您的幸运数字:')print('您的幸运数字是:'+num)#能够链接成功,说明num是字符串类型'''这是多行注释print能用连接符链接的是......
  • springboot 注解学习之——@SpringBootApplication
    springboot注解学习之——@SpringBootApplicationspringboot版本3.1.5@Inherited//不认识的注解,顺便学习,字面意思:继承@SpringBootConfiguration//字面意思:SpringBoot配置@EnableAutoConfiguration//字面意思:可以自动配置@Inherited它是一个元注解(就是用来声明注解......
  • openGauss学习笔记-123 openGauss 数据库管理-设置账本数据库-账本数据库概述
    openGauss学习笔记-123openGauss数据库管理-设置账本数据库-账本数据库概述123.1背景信息账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。当用户创建防篡改用户表时,系统将自动为该表添加一个hash列来保存每行数据的hash摘要信息,同时在blockc......
  • 转发学习
    无论是什么芯片方案,普通厂家转发能做的就是发现问题,报告给sdk厂家,sdk厂家让你帮忙复现,找规律,把问题解决。sdk厂家出patch,你帮忙验证,我们好像也做不了很多事情,最多就是可以听懂人家说的话的大概意思,陪着人家一块查问题。牛一点的,可以大致看懂代码的逻辑。主要的还是内核的代码,n......
  • Django实战项目-学习任务系统-任务完成率统计
    接着上期代码内容,继续完善优化系统功能。本次增加任务完成率统计功能,为更好的了解哪些任务完成率高,哪些任务完成率低。该功能完成后,学习任务系统1.0版本就基本完成了。 1,编辑urls配置文件:./mysite/study_system/urls.pypath('task/getClassTaskList/',views.getClassTaskL......
  • vue3源码学习api-vue-sfc文件编译
    vue最有代表性质的就是.VUE的文件,每一个vue文件都是一个组件,那么vue组件的编译过程是什么样的呢Vue单文件组件(SFC)和指令ast语法树一个Vue单文件组件(SFC),通常使用*.vue作为文件扩展名,它是一种使用了类似HTML语法的自定义文件格式,用于定义Vue组件。一个Vue单......