0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS系统中基础UI组件

HarmonyOS开发者 ? 来源:HarmonyOS开发者 ? 作者:HarmonyOS开发者 ? 2021-09-16 09:39 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、UI组件概述

UI组件(以下简称“组件”),是构建界面的核心。

应用中所有的界面元素都是由组件(Component)和组件容器(ComponentContainer)对象构成。UI界面的构成如下图所示:

Component是绘制在屏幕上的一个对象,用户能与之交互。Java UI框架提供了创建UI界面的各类组件,比如:文本、按钮、图片、列表等。每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。

ComponentContainer是一个用于容纳其他Component和ComponentContainer对象的容器。Java UI框架提供了一些标准布局功能的容器,它们继承自ComponentContainer,一般以“Layout”结尾,如DirectionalLayout、DependentLayout等(由此可以看出,其实布局就是ComponentContainer,同时布局也是一种组件)。

二、基础UI组件

Java UI框架提供了一部分Component和ComponentContainer的具体子类,即用于创建用户界面的各类组件,用户可通过组件进行交互操作,并获得响应。根据组件的功能,可以将组件分为布局类、显示类、交互类三类:

1. 布局类组件

布局类组件是提供了不同布局规范的组件容器,例如以单一方向排列的DirectionalLayout、以相对位置排列的DependentLayout、以确切位置排列的PositionLayout等。

常见的布局类组件如表1所示:

表1 常见的布局类组件

97830ee4-1634-11ec-8fb8-12bb97331649.png

2. 显示类组件

显示类组件提供了单纯的内容显示,例如用于文本显示的Text,用于图像显示的Image等。

常见的显示类组件如表2所示:

表2 常见的显示类组件

97c12850-1634-11ec-8fb8-12bb97331649.png

3. 交互类组件

交互类组件提供了具体场景下与用户交互响应的功能,例如Button提供了点击响应功能,Slider提供了进度选择功能等。

常见的交互类组件如表3所示:

表3 常见的交互类组件

97d543e4-1634-11ec-8fb8-12bb97331649.png

关于基础UI组件的开发,开发者可点击下方官网链接进行学习

官网链接:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-overview-0000000000500404

三、自定义UI组件

当Java UI框架提供的组件无法满足设计需求时,开发者就可以创建自定义组件,根据设计需求添加绘制任务,并定义组件的属性及事件响应,完成组件的自定义。目前,已有300+的自定义UI组件在码云社区开源,开发者可根据自己的需求,点击下方链接下载使用:

下载链接:

https://gitee.com/openharmony-tpc/tpc_resource

同基础UI组件一样,本文将自定义UI组件分为布局类、显示类、交互类三类。下面的章节将着重介绍自定义UI组件的使用。

1. 自定义布局类UI组件

自定义布局类组件是由开发者定义的具有特定布局规则的容器类组件,通过扩展ComponentContainer或其子类实现,将各子组件摆放到指定的位置,响应用户的滑动、拖拽等事件。

小编在码云社区找了一些较为常见的自定义布局类组件供大家参考,如表4所示:

表4 常见的自定义布局类组件

97ec598a-1634-11ec-8fb8-12bb97331649.png

本文将例举ShadowLayout布局,阐述自定义布局类组件的使用。

ShadowLayout是一个可以控制界面元素的阴影颜色、范围及显示边界的布局。效果展示如下:

依赖

开发者需在build.gradle中配置如下信息,引入组件库

1.在项目根目录下的build.gradle文件中,需进行如下配置:

allprojects { repositories { maven { url ‘https://s01.oss.sonatype.org/content/repositories/releases/’ } }}

2.在entry模块的build.gradle文件中,需进行如下配置:

dependencies { implementation(‘com.gitee.chinasoft_ohos1.0.0’)}

使用步骤

1.对布局的基础属性进行初始化,比如设置阴影半径范围、阴影颜色,及阴影大小等。

《com.lijiankun24.shadowlayout.v2.ShadowLayout ohos:height=“match_content” ohos:width=“match_content” ohos:layout_alignment=“center” ohos:shadowColor=“#660000” ohos:shadowDx=“0” ohos:shadowDy=“0” ohos:shadowRadius=“50” ohos:shadowSide=“0x1111” 》 《Image ohos:id=“$+id:image” ohos:height=“50vp” ohos:width=“50vp” ohos:layout_alignment=“center” ohos:background_element=“$graphic:background_ability_show” ohos:image_src=“$media:icon” ohos:scale_mode=“zoom_center” /》《/com.lijiankun24.shadowlayout.v2.ShadowLayout》

ShadowLayout属性说明如表5所示:

表5 ShadowLayout自定义属性

2.通过initComponent()方法初始化组件界面,并设置点击事件监听器,监听界面点击事件。

private void initComponent() { ShadowLayout slOval = (ShadowLayout) findComponentById(ResourceTable.Id_sl_oval); ShadowLayout slRectangle = (ShadowLayout) findComponentById(ResourceTable.Id_sl_rectangle); ShadowLayout slRadius = (ShadowLayout) findComponentById(ResourceTable.Id_sl_radius); slOval.setShadowColor(Color.getIntColor(“#FE3311F3”)); slRectangle.setShadowColor(Color.getIntColor(“#EE000000”)); slRadius.setShadowRadius(DEFAULT_RADIUS); Text textOval = (Text) findComponentById(ResourceTable.Id_text_oval); Text textRectangle = (Text) findComponentById(ResourceTable.Id_text_rectangle); Text textRadius = (Text) findComponentById(ResourceTable.Id_text_radius);

textOval.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { slOval.setShadowColor(Color.getIntColor(“#FEFFD700”)); } }); textRectangle.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { slRectangle.setShadowColor(Color.getIntColor(“#EE00FF7F”)); } });

textRadius.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { slRadius.setShadowRadius(RADIUS); } });}

photoView组件完整代码下载链接:

https://gitee.com/openharmony-tpc/PhotoView

2. 自定义显示类UI组件

自定义显示类UI组件是开发者定义的具有内容显示特性的组件,通过扩展Component或其子类实现。可将富文本、图片、进度条等内容,通过自定义的方式直观地显示给用户。较为常见的自定义显示类组件,如表6所示:

表6 常见的自定义显示类组件

本文通过例举PhotoView组件来阐述自定义显示类组件的使用方法。

PhotoView组件是一个带图片缩放的功能的图片播放器,效果展示如下,通过双击屏幕实现图片的缩放功能。

依赖

开发者需在build.gradle中配置如下信息,引入组件库

dependencies { implementation ‘io.openharmony.tpc.thirdlib1.1.1’}

使用步骤

1.在xml文件中创建布局,对组件的基础属性进行初始化。

《?xml version=“1.0” encoding=“utf-8”?》《DirectionalLayoutxmlns:ohos=“http://schemas.huawei.com/res/ohos”xmlns:photo=“http://schemas.huawei.com/res/photo”ohos:height=“match_parent”ohos:width=“match_parent”ohos:id=“$+id:container”ohos:orientation=“vertical”》

《com.github.chrisbanes.photoview.PhotoView ohos:id=“$+id:photo_v” ohos:height=“match_parent” ohos:width=“match_parent” photo:image=“$media:wallpaper” /》《/DirectionalLayout》

2.初始化photoView

PhotoView photoView = (PhotoView) findComponentById (ResourceTable.Id_photo_v);photoView.setPixelMap(ResourceTable.Media_wallpaper);

3.创建photoView容器

/**创建页面容器 * */@Overridepublic Object createPageInContainer(ComponentContainer componentContainer, int i) { final int data = list.get(i); PhotoView view = new PhotoView(context); view.setPixelMap(data); // 设置组件的布局参数 view.setLayoutConfig(new ComponentContainer.LayoutConfig( ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT )); view.setPageSlider(slider); // 将组件添加到指定位置。 componentContainer.addComponent(view); return view;}

photoView组件完整代码下载链接:

https://gitee.com/openharmony-tpc/PhotoView

3. 自定义交互类UI组件

自定义交互类UI组件是开发者定义具有交互特性的组件,通过扩展Component或其子类实现,可以响应用户的点击、触摸、长按等操作,实现与用户的交互。较为常见的自定义交互类组件,如表7所示:

表7 常见的自定义交互类组件

986b27b0-1634-11ec-8fb8-12bb97331649.png

本文通过SlideSwitch组件,来阐述自定义交互类组件的使用方法。

SlideSwitch在功能上属于交互类组件。展示了不同样式的开关按钮,可以滑动它来打开或关闭按钮开关。

依赖

开发者需在build.gradle中配置如下信息,引入组件库:

allprojects{ repositories{ mavenCentral() }}implementation ‘io.openharmony.tpc.thirdlib1.0.3’

使用步骤

1.在xml文件中创建布局,对组件的基础属性进行设置。

《com.leaking.slideswitch.SlideSwitchohos:id=“$+id:swit2”ohos:width=“190vp”ohos:height=“100vp”ohos:top_margin=“30vp”slideswitch:is_open=“true”slideswitch:shape=“2”slideswitch:theme_color=“#0a5a00”/》

2.监听滑动开关的变化,并通过setState()方法设置开关的默认状态。

@Overridepublic void onStart(Intent intent) { super.onStart(intent); setUIContent(ResourceTable.Layout_ability_main); mSlideSwitch = (SlideSwitch) findComponentById(ResourceTable.Id_swit1); mSlideSwitch2 = (SlideSwitch) findComponentById(ResourceTable.Id_swit2); mText = (Text) findComponentById(ResourceTable.Id_text); mSlideSwitch.setSlideListener(this); // 控制开关按钮的默认状态 mSlideSwitch.setState(false);}

@Overridepublic void open(SlideSwitch slideSwitch) { if (slideSwitch.getId() == ResourceTable.Id_swit1) { mText.setText(“first switch is opend,and set the second one is ‘slideable’”); mSlideSwitch2.setSlideable(true); }}

@Overridepublic void close(SlideSwitch slideSwitch) { if (slideSwitch.getId() == ResourceTable.Id_swit1) { mText.setText(“first switch is closed,and set the second one is ‘unslideable’”); mSlideSwitch2.setSlideable(false); }}

SlideSwitch组件完整代码下载链接:

https://gitee.com/openharmony-tpc/slideview

至此,就完成了自定义UI组件的使用。是不是超级方便呀!赶快到码云社区下载源码学习吧~

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    7177

    浏览量

    125918
  • ui
    ui
    +关注

    关注

    0

    文章

    208

    浏览量

    21870
  • HarmonyOS
    +关注

    关注

    80

    文章

    2130

    浏览量

    33436

原文标题:一文带你看懂HarmonyOS UI组件的使用

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    UI Design Kit助力精致开发体验

    在鸿蒙数字世界,从光的设计元素出发,解构真实世界的光、形、色,并沉淀在系统底座组件能力。同时,对力的解构,从既有的“引力动效”开始,进一步构建时间和空间的秩序。从“光、形、色,力、
    的头像 发表于 07-14 17:12 ?462次阅读

    HarmonyOS 5】鸿蒙页面和组件生命周期函数

    HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、生命周期阶段: 创建阶段 build: 构建
    的头像 发表于 07-11 18:24 ?344次阅读

    HarmonyOS 5】金融应用开发鸿蒙组件实践

    HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、鸿蒙生态观察 2024 年 1 月 18 日: 发布
    的头像 发表于 07-11 18:20 ?344次阅读
    【<b class='flag-5'>HarmonyOS</b> 5】金融应用开发鸿蒙<b class='flag-5'>组件</b>实践

    HarmonyOS AI辅助编程工具(CodeGenie)UI生成

    对应的HarmonyOS UI代码,其中包含HarmonyOS基础工程、页面布局、组件及属性和资源文件等。 一、使用约束 建议使用DevEco Studio 5.0.3.700及以上版
    发表于 07-10 11:51

    HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解

    框架的技术变革 在移动操作系统的发展历程UI 开发模式经历了从 命令式到声明式 的重大变革。 根据华为开发者联盟 2024 年数据报告显示,HarmonyOS 设备激活量已突破
    的头像 发表于 07-07 11:57 ?186次阅读
    【 <b class='flag-5'>HarmonyOS</b> 5 入门系列 】鸿蒙<b class='flag-5'>HarmonyOS</b>示例项目讲解

    HarmonyOS next】ArkUI-X休闲益智连连看【进阶】

    ;: 统一UI描述:ArkTS声明式语法在双端生成原生UI组件 共享核心逻辑:TypeScript编写的游戏算法(如BFS路径搜索)直接复用 原生渲染引擎:各平台使用系统原生渲染管线(
    发表于 06-28 21:51

    UI开发概述

    组件UI的必要元素,形成了在界面的样子,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件
    发表于 06-24 06:36

    HarmonyOS 5】鸿蒙的UIAbility详解(三)

    HarmonyOS 5】鸿蒙的UIAbility详解(三) ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 本文是鸿蒙的UIA
    的头像 发表于 06-14 22:32 ?113次阅读

    HarmonyOS基础组件:Button三种类型的使用

    简介 HarmonyOS在明年将正式不再兼容Android原生功能,这意味着对于客户端的小伙伴不得不开始学习HarmonyOS开发语言。本篇文章主要介绍鸿蒙的Button使用。 Harmon
    的头像 发表于 06-09 15:48 ?315次阅读
    <b class='flag-5'>HarmonyOS</b>基础<b class='flag-5'>组件</b>:Button三种类型的使用

    HarmonyOS实战:组件化项目搭建

    前言 鸿蒙应用开发已经成为互联网新的风口,开发鸿蒙软件已经成为今年工作的核心目标。在软件开发过程,对于复杂度较大,功能较多的软件都会采用组件化项目架构,那么对于鸿蒙应用开发是否也能实现组件化呢
    的头像 发表于 06-09 14:58 ?260次阅读
    <b class='flag-5'>HarmonyOS</b>实战:<b class='flag-5'>组件</b>化项目搭建

    UIAbility组件生命周期介绍

    调,在UIAbility的UI可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调申请系统需要的资源,或者重新申请在onBackground()
    发表于 05-16 08:28

    UIAbility组件UI的数据同步介绍

    UIAbility组件UI的数据同步 基于当前的应用模型,可以通过以下几种方式来实现UIAbility组件UI之间的数据同步。 使用EventHub进行数据通信:在基类Cont
    发表于 05-16 06:10

    解决HarmonyOS应用Image组件白块问题的有效方案

    HarmonyOS应用开发过程,通过Image组件加载网络图片时,通常会经历四个关键阶段:组件创建、图片资源下载、图片解码和刷新。当加载的图片资源过大时,Image
    的头像 发表于 02-17 10:08 ?1189次阅读
    解决<b class='flag-5'>HarmonyOS</b>应用<b class='flag-5'>中</b>Image<b class='flag-5'>组件</b>白块问题的有效方案

    HarmonyOS开发指导类文档更新速递(上)

    伴随着HarmonyOS 5.0.0 Release版本的发布,HarmonyOS官网文档也带来了不少上新内容。本期HarmonyOS NEXT开发者资料直通车将从文档更新角度为开发者推荐应用框架
    的头像 发表于 12-30 09:50 ?1107次阅读
    <b class='flag-5'>HarmonyOS</b>开发指导类文档更新速递(上)

    AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)

    导读HarmonyOS是全球第三大移动操作系统,有巨大的市场潜力,在国产替代的背景下,机会多多,AWTK支持HarmonyOS,让AWTK开发者也能享受HarmonyOS生态的红利。A
    的头像 发表于 11-06 08:03 ?890次阅读
    AWTK 最新动态:支持鸿蒙<b class='flag-5'>系统</b>(<b class='flag-5'>HarmonyOS</b> Next)