0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解讀HarmonyOS自定義UI組件的使用

HarmonyOS開(kāi)發(fā)者 ? 來(lái)源:HarmonyOS開(kāi)發(fā)者 ? 作者:HarmonyOS開(kāi)發(fā)者 ? 2021-09-16 09:30 ? 次閱讀
一、UI組件概述

UI組件(以下簡(jiǎn)稱“組件”),是構(gòu)建界面的核心。

應(yīng)用中所有的界面元素都是由組件(Component)和組件容器(ComponentContainer)對(duì)象構(gòu)成。

Component是繪制在屏幕上的一個(gè)對(duì)象,用戶能與之交互。Java UI框架提供了創(chuàng)建UI界面的各類組件,比如:文本、按鈕、圖片、列表等。每個(gè)組件通過(guò)對(duì)數(shù)據(jù)和方法的簡(jiǎn)單封裝,實(shí)現(xiàn)獨(dú)立的可視、可交互功能單元。

ComponentContainer是一個(gè)用于容納其他Component和ComponentContainer對(duì)象的容器。Java UI框架提供了一些標(biāo)準(zhǔn)布局功能的容器,它們繼承自ComponentContainer,一般以“Layout”結(jié)尾,如DirectionalLayout、DependentLayout等(由此可以看出,其實(shí)布局就是ComponentContainer,同時(shí)布局也是一種組件)。

二、基礎(chǔ)UI組件

Java UI框架提供了一部分Component和ComponentContainer的具體子類,即用于創(chuàng)建用戶界面的各類組件,用戶可通過(guò)組件進(jìn)行交互操作,并獲得響應(yīng)。根據(jù)組件的功能,可以將組件分為布局類、顯示類、交互類三類:

1. 布局類組件

布局類組件是提供了不同布局規(guī)范的組件容器,例如以單一方向排列的DirectionalLayout、以相對(duì)位置排列的DependentLayout、以確切位置排列的PositionLayout等。

常見(jiàn)的布局類組件如表1所示:

表1 常見(jiàn)的布局類組件97830ee4-1634-11ec-8fb8-12bb97331649.png ?

2. 顯示類組件

顯示類組件提供了單純的內(nèi)容顯示,例如用于文本顯示的Text,用于圖像顯示的Image等。

常見(jiàn)的顯示類組件如表2所示:

表2 常見(jiàn)的顯示類組件

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

3. 交互類組件

交互類組件提供了具體場(chǎng)景下與用戶交互響應(yīng)的功能,例如Button提供了點(diǎn)擊響應(yīng)功能,Slider提供了進(jìn)度選擇功能等。

常見(jiàn)的交互類組件如表3所示:

表3 常見(jiàn)的交互類組件

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

關(guān)于基礎(chǔ)UI組件的開(kāi)發(fā),開(kāi)發(fā)者可點(diǎn)擊下方官網(wǎng)鏈接進(jìn)行學(xué)習(xí)

  • 官網(wǎng)鏈接:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-overview-0000000000500404 三、自定義UI組件

當(dāng)Java UI框架提供的組件無(wú)法滿足設(shè)計(jì)需求時(shí),開(kāi)發(fā)者就可以創(chuàng)建自定義組件,根據(jù)設(shè)計(jì)需求添加繪制任務(wù),并定義組件的屬性及事件響應(yīng),完成組件的自定義。目前,已有300+的自定義UI組件在碼云社區(qū)開(kāi)源,開(kāi)發(fā)者可根據(jù)自己的需求,點(diǎn)擊下方鏈接下載使用:

  • 下載鏈接:

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

同基礎(chǔ)UI組件一樣,本文將自定義UI組件分為布局類、顯示類、交互類三類。下面的章節(jié)將著重介紹自定義UI組件的使用。

1. 自定義布局類UI組件

自定義布局類組件是由開(kāi)發(fā)者定義的具有特定布局規(guī)則的容器類組件,通過(guò)擴(kuò)展ComponentContainer或其子類實(shí)現(xiàn),將各子組件擺放到指定的位置,響應(yīng)用戶的滑動(dòng)、拖拽等事件。

小編在碼云社區(qū)找了一些較為常見(jiàn)的自定義布局類組件供大家參考,如表4所示:

表4 常見(jiàn)的自定義布局類組件

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

本文將例舉ShadowLayout布局,闡述自定義布局類組件的使用。

ShadowLayout是一個(gè)可以控制界面元素的陰影顏色、范圍及顯示邊界的布局。

  • 依賴

開(kāi)發(fā)者需在build.gradle中配置如下信息,引入組件庫(kù)

1.在項(xiàng)目根目錄下的build.gradle文件中,需進(jìn)行如下配置:

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

2.在entry模塊的build.gradle文件中,需進(jìn)行如下配置:

dependencies {    implementation('com.gitee.chinasoft_ohos1.0.0')}
  • 使用步驟

1.對(duì)布局的基礎(chǔ)屬性進(jìn)行初始化,比如設(shè)置陰影半徑范圍、陰影顏色,及陰影大小等。

<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>

(左右滑動(dòng),查看更多)

ShadowLayout屬性說(shuō)明如表5所示:

表5 ShadowLayout自定義屬性

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

2.通過(guò)initComponent()方法初始化組件界面,并設(shè)置點(diǎn)擊事件監(jiān)聽(tīng)器,監(jiān)聽(tīng)界面點(diǎn)擊事件。

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);        }    });}
(左右滑動(dòng),查看更多)
  • photoView組件完整代碼下載鏈接:

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

2. 自定義顯示類UI組件

自定義顯示類UI組件是開(kāi)發(fā)者定義的具有內(nèi)容顯示特性的組件,通過(guò)擴(kuò)展Component或其子類實(shí)現(xiàn)??蓪⒏晃谋尽D片、進(jìn)度條等內(nèi)容,通過(guò)自定義的方式直觀地顯示給用戶。較為常見(jiàn)的自定義顯示類組件,如表6所示:

表6 常見(jiàn)的自定義顯示類組件

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

本文通過(guò)例舉PhotoView組件來(lái)闡述自定義顯示類組件的使用方法。

PhotoView組件是一個(gè)帶圖片縮放的功能的圖片播放器,效果展示如下,通過(guò)雙擊屏幕實(shí)現(xiàn)圖片的縮放功能。

依賴

開(kāi)發(fā)者需在build.gradle中配置如下信息,引入組件庫(kù)

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

(左右滑動(dòng),查看更多)

  • 使用步驟

1.在xml文件中創(chuàng)建布局,對(duì)組件的基礎(chǔ)屬性進(jìn)行初始化。

<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>

(左右滑動(dòng),查看更多)

2.初始化photoView

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

(左右滑動(dòng),查看更多)

3.創(chuàng)建photoView容器

/**創(chuàng)建頁(yè)面容器 * */@Overridepublic Object createPageInContainer(ComponentContainer componentContainer, int i) {    final int data = list.get(i);    PhotoView view = new PhotoView(context);    view.setPixelMap(data);    // 設(shè)置組件的布局參數(shù)    view.setLayoutConfig(new ComponentContainer.LayoutConfig(            ComponentContainer.LayoutConfig.MATCH_PARENT,            ComponentContainer.LayoutConfig.MATCH_PARENT    ));    view.setPageSlider(slider);    // 將組件添加到指定位置。    componentContainer.addComponent(view);    return view;}

(左右滑動(dòng),查看更多)

  • photoView組件完整代碼下載鏈接:

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

3. 自定義交互類UI組件

自定義交互類UI組件是開(kāi)發(fā)者定義具有交互特性的組件,通過(guò)擴(kuò)展Component或其子類實(shí)現(xiàn),可以響應(yīng)用戶的點(diǎn)擊、觸摸、長(zhǎng)按等操作,實(shí)現(xiàn)與用戶的交互。較為常見(jiàn)的自定義交互類組件,如表7所示:

表7 常見(jiàn)的自定義交互類組件

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

本文通過(guò)SlideSwitch組件,來(lái)闡述自定義交互類組件的使用方法。

SlideSwitch在功能上屬于交互類組件。展示了不同樣式的開(kāi)關(guān)按鈕,可以滑動(dòng)它來(lái)打開(kāi)或關(guān)閉按鈕開(kāi)關(guān)。

  • 依賴

開(kāi)發(fā)者需在build.gradle中配置如下信息,引入組件庫(kù):

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

(左右滑動(dòng),查看更多)

  • 使用步驟

1.在xml文件中創(chuàng)建布局,對(duì)組件的基礎(chǔ)屬性進(jìn)行設(shè)置。

 <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"/>

(左右滑動(dòng),查看更多)

2.監(jiān)聽(tīng)滑動(dòng)開(kāi)關(guān)的變化,并通過(guò)setState()方法設(shè)置開(kāi)關(guān)的默認(rèn)狀態(tài)。

@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);    // 控制開(kāi)關(guān)按鈕的默認(rèn)狀態(tài)    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);    }}

(左右滑動(dòng),查看更多)

  • SlideSwitch組件完整代碼下載鏈接:

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

至此,就完成了自定義UI組件的使用。是不是超級(jí)方便呀!趕快到碼云社區(qū)下載源碼學(xué)習(xí)吧~

編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2970

    瀏覽量

    104834
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17509
  • ui
    ui
    +關(guān)注

    關(guān)注

    0

    文章

    204

    瀏覽量

    21388
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL).pdf》資料免費(fèi)下載
    發(fā)表于 09-19 10:50 ?0次下載
    創(chuàng)建<b class='flag-5'>自定義</b>的基于閃存的引導(dǎo)加載程序(BSL)

    EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃

    EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶自定義軌跡規(guī)劃。
    的頭像 發(fā)表于 08-15 11:49 ?656次閱讀
    EtherCAT運(yùn)動(dòng)控制器PT/PVT實(shí)現(xiàn)用戶<b class='flag-5'>自定義</b>軌跡規(guī)劃

    NVIDIA NeMo加速并簡(jiǎn)化自定義模型開(kāi)發(fā)

    如果企業(yè)希望充分發(fā)揮出 AI 的力量,就需要根據(jù)其行業(yè)需求量身定制的自定義模型。
    的頭像 發(fā)表于 07-26 11:17 ?770次閱讀
    NVIDIA NeMo加速并簡(jiǎn)化<b class='flag-5'>自定義</b>模型開(kāi)發(fā)

    espidf自定義組件明明已經(jīng)包含了應(yīng)該包含的內(nèi)容,為什么編譯一直提示未包含?

    早上好,這是一個(gè)自定義組件,明明已經(jīng)包含了應(yīng)該包含的內(nèi)容,為什么編譯一直提示未包含,而且可以ctrl+頭文件能連接到相應(yīng)函數(shù),謝謝
    發(fā)表于 06-18 07:20

    在components下添加自定義組件,為什么my_seg組件就找不到my_seg.h頭文件?

    這是我的項(xiàng)目結(jié)構(gòu),在components下,我自定義了三個(gè)組件,分別為my_gpio,my_timer,my_seg,每個(gè)組件都添加了CMAKE,并且my_gpio和my_timer組件
    發(fā)表于 06-05 06:54

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)WEB-自定義頁(yè)面請(qǐng)求響應(yīng)

    Web組件支持在應(yīng)用攔截到頁(yè)面請(qǐng)求后自定義響應(yīng)請(qǐng)求能力。開(kāi)發(fā)者通過(guò)onInterceptRequest()接口來(lái)實(shí)現(xiàn)自定義資源請(qǐng)求響應(yīng)。自定義請(qǐng)求能力可以用于開(kāi)發(fā)者
    發(fā)表于 05-23 15:57

    HarmonyOS開(kāi)發(fā)案例:【 自定義彈窗】

    基于ArkTS的聲明式開(kāi)發(fā)范式實(shí)現(xiàn)了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實(shí)現(xiàn)自定義彈窗
    的頭像 發(fā)表于 05-16 18:18 ?1387次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)案例:【 <b class='flag-5'>自定義</b>彈窗】

    TSMaster 自定義 LIN 調(diào)度表編程指導(dǎo)

    LIN(LocalInterconnectNetwork)協(xié)議調(diào)度表是用于LIN總線通信中的消息調(diào)度的一種機(jī)制,我們收到越來(lái)越多來(lái)自不同用戶希望能夠通過(guò)接口實(shí)現(xiàn)自定義LIN調(diào)度表的需求。所以在
    的頭像 發(fā)表于 05-11 08:21 ?694次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調(diào)度表編程指導(dǎo)

    HarmonyOS開(kāi)發(fā)案例:【UIAbility和自定義組件生命周期】

    本文檔主要描述了應(yīng)用運(yùn)行過(guò)程中UIAbility和自定義組件的生命周期。對(duì)于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期。對(duì)于頁(yè)面
    的頭像 發(fā)表于 05-10 15:31 ?1270次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)案例:【UIAbility和<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>生命周期】

    HarmonyOS開(kāi)發(fā)案例:【常用組件與布局】

    HarmonyOS ArkUI提供了豐富多樣的UI組件,您可以使用這些組件輕松地編寫出更加豐富、漂亮的界面。
    的頭像 發(fā)表于 05-09 18:20 ?1235次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)案例:【常用<b class='flag-5'>組件</b>與布局】

    HarmonyOS實(shí)戰(zhàn)開(kāi)發(fā)-深度探索與打造個(gè)性化自定義組件

    今天分享一下 什么是自定義組件?及其自定義組件的實(shí)戰(zhàn)。 做過(guò)前端或者android開(kāi)發(fā)的都知道自定義組件
    發(fā)表于 05-08 16:30

    HarmonyOS開(kāi)發(fā)案例:【彈窗使用】

    基于dialog和button組件,實(shí)現(xiàn)彈窗的幾種自定義效果
    的頭像 發(fā)表于 04-25 17:44 ?1405次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)案例:【彈窗使用】

    HarmonyOS開(kāi)發(fā)實(shí)例:【自定義Emitter】

    使用[Emitter]實(shí)現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設(shè)置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?1016次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)實(shí)例:【<b class='flag-5'>自定義</b>Emitter】

    鴻蒙ArkUI實(shí)例:【自定義組件

    組件是 OpenHarmony 頁(yè)面最小顯示單元,一個(gè)頁(yè)面可由多個(gè)組件組合而成,也可只由一個(gè)組件組合而成,這些組件可以是ArkUI開(kāi)發(fā)框架自帶系統(tǒng)
    的頭像 發(fā)表于 04-08 10:17 ?656次閱讀

    鴻蒙開(kāi)發(fā)UI界面——@ohos.font (注冊(cè)自定義字體)

    字體管理中注冊(cè)自定義字體。 系統(tǒng)能力: SystemCapability.ArkUI.ArkUI.Full 參數(shù): 參數(shù)名 類型 必填 說(shuō)明 options FontOptions 是 注冊(cè)的自定義
    的頭像 發(fā)表于 02-22 16:22 ?750次閱讀