HarmonyOS 基础之 UI 布局(一)

系统 OpenHarmony
通过对 android UI 已有知识的回顾和最近 harmony 应用开发的学习研究,我总结了一篇UI框架开发文档,记录一些开发中可能遇到的小问题和有用的小技巧分享给大家。

[[417158]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

概述

​ 华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,基于 harmony 的应用开发也越来越广泛。鸿蒙系统是否也能开发出像安卓平台一样绚丽多彩的应用 UI 界面呢?通过对 android UI 已有知识的回顾和最近 harmony 应用开发的学习研究,我总结了一篇UI框架开发文档,记录一些开发中可能遇到的小问题和有用的小技巧分享给大家。

常用布局

一、DirectionalLayout 布局

​ DirectionalLayout 布局即方向布局,该种分为两种模式 ( vertical ) 垂直排列子元素,( horizontal ) 水平排列子元素。垂直排列子元素 height 的总和不得超过父元素否则会被截取,超过部分无法显示。同理水平排列子元素 width 的总和如果超过父元素也会被截取。

​ 水平排列和垂直排列通过设置 ohos:orientation 属性定义,ohos:orientation = " vertical " 为垂直排列,ohos:orientation = " horizontal" 为水平排列;

1、垂直排列

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.         xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.         ohos:width="match_parent" 
  5.         ohos:height="match_parent" 
  6.         // 垂直排列 
  7.         ohos:orientation="vertical"
  8.  
  9.     <Text 
  10.         ohos:text="$string:HelloWorld" 
  11.         ohos:width="match_content" 
  12.         ohos:height="match_content" 
  13.         ohos:text_size="50" 
  14.         ohos:top_margin="30fp" 
  15.         ohos:background_element="#f54444" 
  16.         ohos:layout_alignment="horizontal_center"/> 
  17.     <Text 
  18.         ohos:text="$string:HelloWorld" 
  19.         ohos:width="match_content" 
  20.         ohos:height="match_content" 
  21.         ohos:text_size="50" 
  22.         ohos:top_margin="30fp" 
  23.         ohos:background_element="#f54444" 
  24.         ohos:layout_alignment="horizontal_center"/> 
  25.     <Text 
  26.         ohos:text="$string:HelloWorld" 
  27.         ohos:width="match_content" 
  28.         ohos:height="match_content" 
  29.         ohos:text_size="50" 
  30.         ohos:top_margin="30fp" 
  31.         ohos:background_element="#f54444" 
  32.         ohos:layout_alignment="horizontal_center"/> 
  33. </DirectionalLayout> 

如上代码为垂直方向的三个textview布局,效果图如下:

【中软国际】HarmonyOS 基础之 UI 布局(一)-鸿蒙HarmonyOS技术社区

2、水平排列

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.         xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.         ohos:width="match_parent" 
  5.         ohos:height="match_parent" 
  6.         // 水平排列 
  7.         ohos:orientation="horizontal"
  8.  
  9.     <Text 
  10.         ohos:text="$string:HelloWorld" 
  11.         ohos:width="match_content" 
  12.         ohos:height="match_content" 
  13.         ohos:text_size="50" 
  14.         ohos:top_margin="30fp" 
  15.         ohos:left_margin="10fp" 
  16.         ohos:background_element="#f54444" 
  17.         ohos:layout_alignment="horizontal_center"/> 
  18.     <Text 
  19.         ohos:text="$string:HelloWorld" 
  20.         ohos:width="match_content" 
  21.         ohos:height="match_content" 
  22.         ohos:text_size="50" 
  23.         ohos:top_margin="30fp" 
  24.         ohos:left_margin="10fp" 
  25.         ohos:background_element="#f54444" 
  26.         ohos:layout_alignment="horizontal_center"/> 
  27.     <Text 
  28.         ohos:text="$string:HelloWorld" 
  29.         ohos:width="match_content" 
  30.         ohos:height="match_content" 
  31.         ohos:text_size="50" 
  32.         ohos:top_margin="30fp" 
  33.         ohos:left_margin="10fp" 
  34.         ohos:background_element="#f54444" 
  35.         ohos:layout_alignment="horizontal_center"/> 
  36. </DirectionalLayout> 

如上代码为水平方向的三个textview布局,效果图如下:

【中软国际】HarmonyOS 基础之 UI 布局(一)-鸿蒙HarmonyOS技术社区

3、对齐方式

DirectionalLayout 中的组件使用 layout_alignment 控制自身在布局中的对齐方式,当对齐方式与排列方式方向一致时,对齐方式不会生效具体见下表。

三种基本对齐方式:左对齐,右对齐,居中。分别对应 layout_alignment 属性的

  1. ohos:layout_alignment=“left” 
  2.  
  3. ohos:layout_alignment=“horizontal_center” 
  4.  
  5. ohos:layout_alignment=“right” 

布局展示的样式为:

【中软国际】HarmonyOS 基础之 UI 布局(一)-鸿蒙HarmonyOS技术社区

4、权重

权重( weight )就是按比例来分配组件占用父组件的大小,通过 ohos:weight 属性来定义。布局计算公式为:组件宽度=组件weight/所有组件weight之和*父布局可分配宽度;如 ohos:weight 分别设置为 ohos:weight = “1”,ohos:weight = “2”,ohos:weight = "3"的三个空间,布局则分别占父空间的1/6 , 2/6 , 3/6 。

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:width="match_parent" 
  5.     ohos:height="match_parent" 
  6.     ohos:orientation="horizontal"
  7.  
  8.     <Text 
  9.         ohos:text="TEST" 
  10.         ohos:weight="1" 
  11.         ohos:width="match_content" 
  12.         ohos:height="match_content" 
  13.         ohos:text_size="50" 
  14.         ohos:top_margin="30fp" 
  15.         ohos:background_element="#f78731"/> 
  16.     <Text 
  17.         ohos:text="TEST" 
  18.         ohos:weight="2" 
  19.         ohos:width="match_content" 
  20.         ohos:height="match_content" 
  21.         ohos:text_size="50" 
  22.         ohos:top_margin="30fp" 
  23.         ohos:background_element="#f54444"/> 
  24.     <Text 
  25.         ohos:text="TEST" 
  26.         ohos:weight="3" 
  27.         ohos:width="match_content" 
  28.         ohos:height="match_content" 
  29.         ohos:text_size="50" 
  30.         ohos:top_margin="30fp" 
  31.         ohos:background_element="#f78731"/> 
  32. </DirectionalLayout> 

以上代码展示的布局效果图如下:

【中软国际】HarmonyOS 基础之 UI 布局(一)-鸿蒙HarmonyOS技术社区

二、DependentLayout 布局

DependentLayout 与 DirectionalLayout相比,拥有更多的排布方式,每个组件可以指定相对于其他同级元素的位置,或者指定相对于父组件的位置。

1、相对于同级组件的位置布局

2、相对于父组件的位置布局

DependentLayout 布局类似于 Android 的 RelativeLayout 比较灵活,具体怎么展示和调整组件布局可自行测试。

三、TableLayout 布局

TableLayout使用表格的方式划分子组件, 也就是行和列的方式,TableLayout可配置表格的排列方式,行数和列数,以及组件的位置。

1、行列的设置

ohos:row_count 表示设置网格布局中行数,ohos:column_count 表示设置网格布局中的列数。如果没有为子布局设置行列数,则自动继承父布局的行数和列数。在网格布局中若子组件的数量超出列数设置,则会自动添加行数。比如设置一行,两列,但是是三个子组件,行数设置失效,就会自动增加一行。如下设置三行两列。则布局就是如下展示。

  1. <TableLayout 
  2.     ... 
  3.     ohos:row_count="3" 
  4.     ohos:column_count="2" 
  5.     /> 
【中软国际】HarmonyOS 基础之 UI 布局(一)-鸿蒙HarmonyOS技术社区

2、设置对齐方式

通过属性 ohos:alignment_type 来设置对齐方式,如下:

  1. <TableLayout 
  2.     ... 
  3.     ohos:alignment_type="align_contents"
  4.     ... 
  5. </TableLayout> 

四、StackLayout

StackLayout 直接在屏幕上开辟出一块空白的区域,添加到这个布局中的视图都是以层叠的方式显示,而它会把这些视图默认放到这块区域的左上角,第一个添加到布局中视图显示在最底层,最后一个被放在最顶层。上一层的视图会覆盖下一层的视图。

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <StackLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:id="$+id:stack_layout" 
  5.     ohos:height="match_parent" 
  6.     ohos:width="match_parent"
  7.  
  8.     <Text 
  9.         ohos:id="$+id:text_blue" 
  10.         ohos:text_alignment="bottom|horizontal_center" 
  11.         ohos:text_size="24fp" 
  12.         ohos:text="第一层" 
  13.         ohos:height="400vp" 
  14.         ohos:width="400vp" 
  15.         ohos:background_element="#3F56EA" /> 
  16.  
  17.     <Text 
  18.         ohos:id="$+id:text_light_purple" 
  19.         ohos:text_alignment="bottom|horizontal_center" 
  20.         ohos:text_size="24fp" 
  21.         ohos:text="第二层" 
  22.         ohos:height="300vp" 
  23.         ohos:width="300vp" 
  24.         ohos:background_element="#00AAEE" /> 
  25.  
  26.     <Text 
  27.         ohos:id="$+id:text_orange" 
  28.         ohos:text_alignment="center" 
  29.         ohos:text_size="24fp" 
  30.         ohos:text="第三层" 
  31.         ohos:height="80vp" 
  32.         ohos:width="80vp" 
  33.         ohos:background_element="#00BFC9" /> 
  34. </StackLayout> 

以上代码效果图如下:

【中软国际】HarmonyOS 基础之 UI 布局(一)-鸿蒙HarmonyOS技术社区

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-11-17 11:48:44

HarmonyOS

2020-11-25 12:02:02

TableLayout

2020-11-30 14:09:17

HarmonyOS

2021-10-14 15:14:36

鸿蒙HarmonyOS应用

2021-09-14 09:34:05

鸿蒙HarmonyOS应用

2012-05-14 21:08:47

Android页面布局

2020-11-18 09:58:53

鸿蒙

2021-01-20 13:50:36

鸿蒙HarmonyOS应用开发

2011-06-24 16:27:41

QML UI

2021-08-30 18:34:35

鸿蒙HarmonyOS应用

2018-06-08 15:28:31

Android开发程序

2021-08-27 07:13:52

UI计算机图形

2021-09-09 14:49:26

鸿蒙HarmonyOS应用

2015-06-24 10:17:24

UI流式布局

2013-01-08 16:05:23

Android开发布局ViewStub

2021-08-16 14:45:38

鸿蒙HarmonyOS应用

2021-09-16 10:05:09

鸿蒙HarmonyOS应用

2021-09-30 10:04:01

鸿蒙HarmonyOS应用

2009-06-09 10:24:35

NetBeansStruts页面布局

2010-08-05 13:27:06

Flex布局
点赞
收藏

51CTO技术栈公众号