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

一、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 常见的布局类组件   2. 显示类组件
显示类组件提供了单纯的内容显示,例如用于文本显示的text,用于图像显示的image等。
常见的显示类组件如表2所示:
表2 常见的显示类组件
3. 交互类组件
交互类组件提供了具体场景下与用户交互响应的功能,例如button提供了点击响应功能,slider提供了进度选择功能等。
常见的交互类组件如表3所示:
表3 常见的交互类组件
关于基础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 常见的自定义布局类组件
本文将例举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.对布局的基础属性进行初始化,比如设置阴影半径范围、阴影颜色,及阴影大小等。
                                        (左右滑动,查看更多)
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文件中创建布局,对组件的基础属性进行初始化。
                                (左右滑动,查看更多)
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 常见的自定义交互类组件
本文通过slideswitch组件,来阐述自定义交互类组件的使用方法。
slideswitch在功能上属于交互类组件。展示了不同样式的开关按钮,可以滑动它来打开或关闭按钮开关。
依赖 开发者需在build.gradle中配置如下信息,引入组件库:
            allprojects{ repositories{ mavencentral() }}implementation 'io.openharmony.tpc.thirdlib1.0.3' (左右滑动,查看更多)
使用步骤 1.在xml文件中创建布局,对组件的基础属性进行设置。
                (左右滑动,查看更多)
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组件的使用。是不是超级方便呀!赶快到码云社区下载源码学习吧~

三星S8或推低配版!2750元起!
机械硬盘_固态硬盘和混合硬盘区别对比
如何使中国家电行业的全球化跃上新台阶?
自动化的基本原则
工信部为三大运营商大规模开展物联网业务提供了基础保障
深度解读HarmonyOS自定义UI组件的使用
284%投资回报率!与 Azure AI 共创新的经济价值
普渡科技推出新一代消毒机器人“欢乐消2”为全球抗疫提供技术支持
VR技术医疗行业的应用能否拉动VR的普及
中国电信美洲公司,将是您的优质之选
创造无限可能:全新恩智浦MCX N系列高性能MCU
手机防抖技术:EIS电子防抖和OIS光学防抖
从物联网中看的传感器市场怎样
监狱人员定位导定位系统在监狱的应用
为什么要选择电话机器人,它的优势是什么
智能红外遥控开关工作原理和电路设计
深入分析探讨多千兆位串行链路接口的SI方法
殊途同归!爱帛服饰与厦门航空以IT转型加速创新的秘诀
使用NVIDIA开源模型实现更快的训练和推理
小米6官方海报曝光,雷军:除了曲面,猜猜还有什么黑科技!