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

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

3天内不再提示

深度解读HarmonyOS自定义UI组件的使用

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

扫码添加小助手

加入工程师交流群

一、UI组件概述

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

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

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自定义属性

980f8d4c-1634-11ec-8fb8-12bb97331649.png

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 常见的自定义显示类组件

98350af4-1634-11ec-8fb8-12bb97331649.png

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

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

依赖

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

dependencies {    implementation 'io.openharmony.tpc.thirdlib1.1.1'}

(左右滑动,查看更多)

  • 使用步骤

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

<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组件的使用。是不是超级方便呀!赶快到码云社区下载源码学习吧~

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

    关注

    20

    文章

    2997

    浏览量

    115683
  • 框架
    +关注

    关注

    0

    文章

    404

    浏览量

    18317
  • ui
    ui
    +关注

    关注

    0

    文章

    208

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    无图形界面模式下自定义检查工具的应用

    此前文章已介绍 ANSA 中的自定义检查工具。本文将探讨该功能在无图形界面(No-GUI)模式下的应用,旨在满足标准化工作流程的需求,适用于需要高度自动化的前处理场景。通过集成自定义检查,用户可实现工作流程的高效自动化运行。
    的头像 发表于 11-30 14:13 294次阅读
    无图形界面模式下<b class='flag-5'>自定义</b>检查工具的应用

    【M-K1HSE开发板免费体验】相关源码之阅读和分析1-使用XComponent + Vsync 实现自定义动画

    介绍 XComponent 提供了应用在 native 侧调用 OpenGLES 图形接口的能力,本文主要介绍如何配合 Vsync 事件,完成自定义动画。在这种实现方式下,自定义动画的绘制不在 UI
    发表于 09-03 16:05

    大彩讲堂:VisualTFT软件如何自定义圆形进度条

    VisualTFT软件如何自定义圆形进度条
    的头像 发表于 07-07 17:10 1219次阅读
    大彩讲堂:VisualTFT软件如何<b class='flag-5'>自定义</b>圆形进度条

    HarmonyOS实战:3秒实现一个自定义轮播图

    那么简单,需要考虑的细节很多。不过在 HarmonyOS 中实现一个轮播图却是十分的简单,本篇文章教你在最短的时间内快速实现一个自定义的 轮播图,建议点赞收藏!
    的头像 发表于 06-24 17:06 394次阅读

    UI开发概述

    应用开发在TypeScript(简称TS)生态基础上做了进一步扩展。扩展能力包含声明式UI描述、自定义组件、动态扩展UI元素、状态管理和渲染控制。状态管理作为基于ArkTS的声明式开发
    发表于 06-24 06:36

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 1460次阅读
    KiCad 中的<b class='flag-5'>自定义</b>规则(KiCon 演讲)

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 1575次阅读

    UIAbility组件UI的数据同步介绍

    通信。使用EventHub实现UIAbility与UI之间的数据通信需要先获取EventHub对象,本章节将以此为例进行说明。 在UIAbility中调用eventHub.on()方法注册一个自定义
    发表于 05-16 06:10

    LabVIEW运动控制(三):EtherCAT运动控制器的高效加工指令自定义封装

    LabVIEW高效加工指令自定义封装
    的头像 发表于 04-08 13:49 3266次阅读
    LabVIEW运动控制(三):EtherCAT运动控制器的高效加工指令<b class='flag-5'>自定义</b>封装

    如何添加自定义单板

    在开发过程中,用户有时需要创建自定义板配置。本节将通过一个实例讲解用户如何创建属于自己的machine,下面以g2l-test.conf为例进行说明。
    的头像 发表于 03-12 14:43 1082次阅读

    如何快速创建用户自定义Board和App工程

    概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,用户
    的头像 发表于 02-08 13:38 999次阅读
    如何快速创建用户<b class='flag-5'>自定义</b>Board和App工程

    Altium Designer 15.0自定义元件设计

    电子发烧友网站提供《Altium Designer 15.0自定义元件设计.pdf》资料免费下载
    发表于 01-21 15:04 0次下载
    Altium Designer 15.0<b class='flag-5'>自定义</b>元件设计

    think-cell:自定义think-cell(四)

    C.5 设置默认议程幻灯片布局 think-cell 议程可以在演示文稿中使用特定的自定义布局来定义议程、位置和议程幻灯片上的其他形状,例如标题或图片。通过将此自定义布局添加到模板,您可以为整个组织
    的头像 发表于 01-13 10:37 880次阅读
    think-cell:<b class='flag-5'>自定义</b>think-cell(四)

    智能语音识别照明解决方案,平台自定义,中英切换

    智能语音识别照明方案引入NRK3502芯片,支持平台自定义,离线控制,中英双语切换。NRK3502具备高性能和灵活自定义能力,可推动智能照明革新,控制其他智能设备,为国际用户提供全方位智能生活体验。
    的头像 发表于 01-10 13:23 800次阅读
    智能语音识别照明解决方案,平台<b class='flag-5'>自定义</b>,中英切换

    think-cell;自定义think-cell(一)

    本章介绍如何自定义 think-cell,即如何更改默认颜色和其他默认属性;这是通过 think-cell 的样式文件完成的,这些文件将在前四个部分中进行讨论。 第五部分 C.5 设置默认议程幻灯片
    的头像 发表于 01-08 11:31 1240次阅读
    think-cell;<b class='flag-5'>自定义</b>think-cell(一)