当前位置: 首页 > news >正文

UI开发布局-HarmonyOS应用UI开发布局

UI页面的构建不用再像Android开发过程中在.xml文件中书写,可直接在页面上使用声明式UI的方式按照布局进行排列,构建应用的页面。

如下代码使用Row、Column构建一个页面布局,在页面布局中添加组件Text、Button,共同构成页面:


import router from '@ohos.router'
import hilog from '@ohos.hilog'
@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)// 添加按钮,以响应用户点击Button('Next').fontSize(30).fontWeight(FontWeight.Bold).type(ButtonType.Capsule).margin({top: 20}).width('40%').height('5%')// 设置点击事件,进行跳转.onClick(() => {// 跳转到第二页router.pushUrl({ url: 'pages/SecondPage' }).then(() => {}).catch((err) => {hilog.error(0x0000, "index", 'Failed to jump to the second page')})})}.width('100%')}.height('100%')}
}

在实际开发的过程中,按照如下流程进行页面的布局:

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

1.布局结构

布局的结构是分层级的,代表了用户界面中的整体架构。

如图所示:

2.布局元素的组成

布局相关的容器组件形成对应的布局效果,布局元素组成图:

可针对布局元素进行相应的设置,实现自定义的效果。

  • 组件区域(蓝区方块):组件区域表明组件的大小,width、height属性设置该区域的大小。
  • 组件内容区(黄色方块):组件区域大小减去组件的border值,组件内容区大小会作为组件内容(或者子组件)进行大小测算时的布局测算限制。
  • 组件内容(绿色方块):组件内容本身占用的大小,比如文本内容占用的大小。组件内容和组件内容区不一定匹配,比如设置了固定的width和height,此时组件内容的大小就是设置的width和height减去padding和border值,但文本内容则是通过文本布局引擎测算后得到的大小,可能出现文本真实大小小于设置的组件内容区大小。当组件内容和组件内容区大小不一致时,align属性生效,定义组件内容在组件内容区的对齐方式,如居中对齐。
  • 组件布局边界(虚线部分):组件通过margin属性设置外边距时,组件布局边界就是组件区域加上margin的大小。

3.如何选择布局

声明式UI提供了常见布局,可根据实际场景选择合适的布局。同Android开发中选用具体的布局进行页面开发:

  • 线性布局,Row、Column
  • 层叠布局,Stack
  • 弹性布局,Flex,同线性布局,区别在于弹性布局默认能够使子组件压缩或拉伸,在需要填充容器时使用。
  • 相对布局,RelativeContainer
  • 栅格布局,GridRow、GridCol
  • 媒体查询,@ohos.mediaquery,媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。
  • 列表,List,同Android中的ListView
  • 网格,Grid,网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局。
  • 轮播,Swiper,使用该布局实现广告轮播、图片预览等效果。

为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (OpenHarmony)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

相关文章:

  • 【Python 千题 —— 基础篇】参加聚会
  • 软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试
  • 表的增删改查 进阶(二)
  • MySQL(四)——约束
  • Python GUI 新手入门教程:轻松构建图形用户界面
  • [足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05
  • 我用 ChatGPT 做了一次探索性数据分析,真的太太太实用了!
  • 【算法与数据结构】Java实现查找与排序
  • TPU编程竞赛系列|第八届集创赛“算能杯“报名开启!
  • 阿里云服务器配置选择之线下IDC直接映射
  • 【备战蓝桥杯】吃奶酪问题 / 超硬核,文附template拓展知识!
  • 位运算的规则(算法村第十一关青铜挑战)
  • ❤ Uniapp使用四( 高阶使用配置和各种实现篇)
  • 【CC++】为什么 scanf 函数在读取字符串时不需要用取地址运算符
  • git中合并分支时出现了代码冲突怎么办
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • C++11: atomic 头文件
  • Debian下无root权限使用Python访问Oracle
  • Java应用性能调优
  • jQuery(一)
  • MaxCompute访问TableStore(OTS) 数据
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PHP面试之三:MySQL数据库
  • Python利用正则抓取网页内容保存到本地
  • rc-form之最单纯情况
  • Vim 折腾记
  • 简单基于spring的redis配置(单机和集群模式)
  • 类orAPI - 收藏集 - 掘金
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何设计一个微型分布式架构?
  • 通信类
  • 小程序测试方案初探
  • 异步
  • 用Python写一份独特的元宵节祝福
  • 优化 Vue 项目编译文件大小
  • 阿里云服务器如何修改远程端口?
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #ifdef 的技巧用法
  • (2)nginx 安装、启停
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)hibernate配置管理
  • (分布式缓存)Redis哨兵
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (力扣)循环队列的实现与详解(C语言)
  • (六)c52学习之旅-独立按键
  • (四) Graphivz 颜色选择
  • (转)c++ std::pair 与 std::make
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现