在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    2986

    瀏覽量

    107056
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    17811
  • ui
    ui
    +關注

    關注

    0

    文章

    206

    瀏覽量

    21696
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS實戰:自定義時間選擇器

    前言 最近在日常鴻蒙開發過程中,經常會使用一些時間選擇器,鴻蒙官方提供的時間選擇器滿足不了需求,所以自己動手自定義一些經常會使用到的時間選擇器,希望能幫到你,建議點贊收藏! 實現效果 需求分析 默認
    的頭像 發表于 06-09 15:51 ?81次閱讀
    <b class='flag-5'>HarmonyOS</b>實戰:<b class='flag-5'>自定義</b>時間選擇器

    HarmonyOS應用自定義鍵盤解決方案

    自定義鍵盤是一種替換系統默認鍵盤的解決方案,可實現鍵盤個性化交互。允許用戶結合業務需求與操作習慣,對按鍵布局進行可視化重構、設置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護層面,自定義鍵盤可以
    的頭像 發表于 06-05 14:19 ?389次閱讀

    UIAbility組件UI的數據同步介紹

    通信。使用EventHub實現UIAbility與UI之間的數據通信需要先獲取EventHub對象,本章節將以此為例進行說明。 在UIAbility中調用eventHub.on()方法注冊一個自定義
    發表于 05-16 06:10

    LabVIEW運動控制(三):EtherCAT運動控制器的高效加工指令自定義封裝

    LabVIEW高效加工指令自定義封裝
    的頭像 發表于 04-08 13:49 ?2191次閱讀
    LabVIEW運動控制(三):EtherCAT運動控制器的高效加工指令<b class='flag-5'>自定義</b>封裝

    如何添加自定義單板

    在開發過程中,用戶有時需要創建自定義板配置。本節將通過一個實例講解用戶如何創建屬于自己的machine,下面以g2l-test.conf為例進行說明。
    的頭像 發表于 03-12 14:43 ?497次閱讀

    如何快速創建用戶自定義Board和App工程

    概述自HPM_SDKv1.7.0發布開始,在HPM_ENV中新增了user_template文件夾,以方便用戶快速創建自定義的Board和App工程。user_template是用戶模板工程,用戶
    的頭像 發表于 02-08 13:38 ?419次閱讀
    如何快速創建用戶<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 ?461次閱讀
    think-cell:<b class='flag-5'>自定義</b>think-cell(四)

    智能語音識別照明解決方案,平臺自定義,中英切換

    智能語音識別照明方案引入NRK3502芯片,支持平臺自定義,離線控制,中英雙語切換。NRK3502具備高性能和靈活自定義能力,可推動智能照明革新,控制其他智能設備,為國際用戶提供全方位智能生活體驗。
    的頭像 發表于 01-10 13:23 ?374次閱讀
    智能語音識別照明解決方案,平臺<b class='flag-5'>自定義</b>,中英切換

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

    本章介紹如何自定義 think-cell,即如何更改默認顏色和其他默認屬性;這是通過 think-cell 的樣式文件完成的,這些文件將在前四個部分中進行討論。 第五部分 C.5 設置默認議程幻燈片
    的頭像 發表于 01-08 11:31 ?639次閱讀
    think-cell;<b class='flag-5'>自定義</b>think-cell(一)

    創建自定義的基于閃存的引導加載程序(BSL)

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

    如何創建TestStand自定義步驟

    在之前的課程中簡單地介紹過TestStand自帶的一些步驟類型,如測試、消息彈窗、賦值、標簽等等,這些簡單的步驟從TestStand的插入選版中就可以添加到序列中。那么在使用中如果碰到需要實現更加靈活、復雜的功能,使用自帶的一些步驟類型可能難以滿足,這時就需要使用到自定義步驟。
    的頭像 發表于 09-11 14:46 ?2233次閱讀
    如何創建TestStand<b class='flag-5'>自定義</b>步驟

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃。
    的頭像 發表于 08-15 11:49 ?1115次閱讀
    EtherCAT運動控制器PT/PVT實現用戶<b class='flag-5'>自定義</b>軌跡規劃

    NVIDIA NeMo加速并簡化自定義模型開發

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

    espidf自定義組件明明已經包含了應該包含的內容,為什么編譯一直提示未包含?

    早上好,這是一個自定義組件,明明已經包含了應該包含的內容,為什么編譯一直提示未包含,而且可以ctrl+頭文件能連接到相應函數,謝謝
    發表于 06-18 07:20
    主站蜘蛛池模板: 性猛交╳xxx乱大交 性免费视频 | 日本一级黄色毛片 | 国产又粗又大又爽又免费 | 成年人污视频 | 欧美一区二区视频在线观看 | 日本黄在线观看 | 欧美在线性 | 人人揉人人爽五月天视频 | 免费观看在线永久免费xx视频 | 香蕉久久夜色精品国产小说 | 九九久久九九久久 | 天天操天天干天天爱 | 欧美性猛交xxxx免费看久久 | 在线婷婷| 免费看吻胸亲嘴激烈网站 | 午夜亚洲国产 | h国产视频| 免费一日本一级裸片在线观看 | 在线视频网址免费播放 | 亚洲香蕉久久一区二区三区四区 | 5566成人免费视频观看 | 四虎欧美在线观看免费 | 天天爱天天操天天干 | 在线www天堂资源网 在线播放 你懂的 | 国内精品久久久久影院男同志 | 在线看片一区 | 手机看片日韩永久福利盒子 | 99久久免费精品国产免费高清 | 国产精品视频你懂的 | 亚洲综合色丁香婷婷六月图片 | 二区中文字幕 | 欧美成人天天综合在线视色 | 亚洲人成网站色在线观看 | 精品欧美一区二区三区 | 日本天堂影院在线播放 | 天堂资源www天堂在线 | 网站在线观看视频 | 在线视频 亚洲 | 福利片在线观看免费高清 | 5566成人 | 国内精品哆啪啪 |