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

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

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

Java UI框架(Position和AdaptiveBox Layout)設(shè)計

jf_Vqngj70R ? 來源:美男子玩編程 ? 2023-07-31 14:10 ? 次閱讀

1

Position Layout

在PositionLayout中,子組件通過指定準確的x/y坐標值在屏幕上顯示。(0, 0)為左上角,當向下或向右移動時,坐標值變大;允許組件之間互相重疊。

PositionLayout示意圖:

9a16a146-2f57-11ee-815d-dac502259ad0.png

PositionLayout以坐標的形式控制組件的顯示位置,允許組件相互重疊。

在layout目錄下的XML文件中創(chuàng)建PositionLayout并添加多個組件,并通過position_x和position_y屬性設(shè)置子組件的坐標。

使用PositionLayout的布局效果:

9a22f6c6-2f57-11ee-815d-dac502259ad0.png

示例代碼:

xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:id="$+id:position"
    ohos:height="match_parent"
    ohos:width="300vp"
    ohos:background_element="#3387CEFA">


    ohos:id="$+id:position_text_1"
        ohos:height="50vp"
        ohos:width="200vp"
        ohos:background_element="#9987CEFA"
        ohos:position_x="50vp"
        ohos:position_y="8vp"
        ohos:text="Title"
        ohos:text_alignment="center"
        ohos:text_size="20fp"/>


    


    

設(shè)置子組件的坐標時(position_x和position_y屬性),除了上述示例中的XML方式,還可以在對應(yīng)的AbilitySlice中通過setPosition(int x, int y)接口設(shè)置,Java示例代碼如下:

Text title = (Text)findComponentById(ResourceTable.Id_position_text_1);
        Text content1 = (Text)findComponentById(ResourceTable.Id_position_text_2);
        Text content2 = (Text)findComponentById(ResourceTable.Id_position_text_3);


        title.setPosition(vp2px(50), vp2px(8));
        content1.setPosition(vp2px(8), vp2px(64));
        content2.setPosition(vp2px(92), vp2px(188));

單位轉(zhuǎn)換的方法如下:

private int vp2px(float vp){
        return AttrHelper.vp2px(vp,this);
    }
對于超過布局本身大小的組件,超出部分將不顯示。

Right組件右側(cè)超出部分將不顯示:

9a3884b4-2f57-11ee-815d-dac502259ad0.png

示例代碼:




    ...


    ohos:id="$+id:position_text_4"
        ohos:height="120vp"
        ohos:width="120vp"
        ohos:background_element="#9987CEFA"
        ohos:position_x="212vp"
        ohos:position_y="64vp"
        ohos:text="Right"
        ohos:text_alignment="center"
        ohos:text_size="20fp"/>

2

AdaptiveBox Layout

AdaptiveBox Layout是自適應(yīng)盒子布局,該布局提供了在不同屏幕尺寸設(shè)備上的自適應(yīng)布局能力,主要用于相同級別的多個組件需要在不同屏幕尺寸設(shè)備上自動調(diào)整列數(shù)的場景。

該布局中的每個子組件都用一個單獨的“盒子”裝起來,子組件設(shè)置的布局參數(shù)都是以盒子作為父布局生效,不以整個自適應(yīng)布局為生效范圍。

該布局中每個盒子的寬度固定為布局總寬度除以自適應(yīng)得到的列數(shù),高度為match_content,每一行中的所有盒子按高度最高的進行對齊。

該布局水平方向是自動分塊,因此水平方向不支持match_content,布局水平寬度僅支持match_parent或固定寬度。

自適應(yīng)僅在水平方向進行了自動分塊,縱向沒有做限制,因此如果某個子組件的高設(shè)置為match_parent類型,可能導(dǎo)致后續(xù)行無法顯示。

AdaptiveBox Layout示意圖:

9a5941e0-2f57-11ee-815d-dac502259ad0.jpg

AdaptiveBox Layout布局常用方法如下:

方法 功能
addAdaptiveRule(int minWidth, int maxWidth, int columns) 添加一個自適應(yīng)盒子布局規(guī)則。
removeAdaptiveRule(int minWidth, int maxWidth, int columns) 移除一個自適應(yīng)盒子布局規(guī)則。
clearAdaptiveRules() 移除所有自適應(yīng)盒子布局規(guī)則。

在AdaptiveBox Layout中添加和刪除自適應(yīng)盒子布局規(guī)則的效果對比如下。

9a685fa4-2f57-11ee-815d-dac502259ad0.gif

XML布局示例代碼:

xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical">


    xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="0vp"
        ohos:width="match_parent"
        ohos:weight="1"
        ohos:id="$+id:adaptive_box_layout">


        

Java關(guān)鍵代碼:

AdaptiveBoxLayout adaptiveBoxLayout = (AdaptiveBoxLayout)findComponentById(ResourceTable.Id_adaptive_box_layout);


findComponentById(ResourceTable.Id_add_rule_btn).setClickedListener((component-> {
    // 添加規(guī)則
    adaptiveBoxLayout.addAdaptiveRule(100, 2000, 3);
    // 更新布局
    adaptiveBoxLayout.postLayout();
}));


findComponentById(ResourceTable.Id_remove_rule_btn).setClickedListener((component-> {
    // 移除規(guī)則
    adaptiveBoxLayout.removeAdaptiveRule(100, 2000, 3);
    // 更新布局
    adaptiveBoxLayout.postLayout();
}));





審核編輯:劉清

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

    關(guān)注

    0

    文章

    138

    瀏覽量

    20063
  • XML技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    6008
  • LAYOUT技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    5948
  • Layout設(shè)計
    +關(guān)注

    關(guān)注

    1

    文章

    13

    瀏覽量

    1586
  • XML加密
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    978

原文標題:HarmonyOS學(xué)習路之開發(fā)篇—Java UI框架(Position和AdaptiveBox Layout)

文章出處:【微信號:美男子玩編程,微信公眾號:美男子玩編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【HarmonyOS HiSpark AI Camera試用連載 】鴻蒙JS UI介紹

    開發(fā)的FA應(yīng)用,這里的FA應(yīng)用特指JS FA應(yīng)用。使用Java開發(fā)FA應(yīng)用請參考Java UI框架。Framework前端框架層主要完成前端
    發(fā)表于 01-11 20:10

    請教鴻蒙應(yīng)用開發(fā)JAVA UI 框架ProgressBar或者RoundProgressBar怎么實現(xiàn)滑動調(diào)節(jié)

    如題https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java
    發(fā)表于 01-12 15:23

    輕量級的ui框架如何去制作

    原創(chuàng)分享:自制輕量級單片機UI框架框架元素用戶接口代碼開源平時??碿sdn,但是從來沒有自己寫過。正好這幾天需要用單片機做一個簡易的ui界面,于是自己寫了一個輕量級的
    發(fā)表于 07-14 07:39

    基于HarmonyOS Java UI使用元數(shù)據(jù)綁定框架實現(xiàn)UI和數(shù)據(jù)源的綁定

    1. 介紹元數(shù)據(jù)綁定框架是基于HarmonyOS SDK開發(fā)的一套提供UI和數(shù)據(jù)源綁定能力的框架。通過使用元數(shù)據(jù)綁定框架,HarmonyOS應(yīng)用開發(fā)者無需開發(fā)繁瑣重復(fù)的代碼即可實現(xiàn)綁定
    發(fā)表于 08-18 10:23

    基于HarmonyOS Java UI,使用元數(shù)據(jù)綁定框架,實現(xiàn)UI和數(shù)據(jù)源的綁定

    1. 介紹元數(shù)據(jù)綁定框架是基于HarmonyOS SDK開發(fā)的一套提供UI和數(shù)據(jù)源綁定能力的框架。通過使用元數(shù)據(jù)綁定框架,HarmonyOS應(yīng)用開發(fā)者無需開發(fā)繁瑣重復(fù)的代碼即可實現(xiàn)綁定
    發(fā)表于 09-01 14:54

    基于HarmonyOS Java UI,實現(xiàn)常見組件或者布局

    /resources/base/layout目錄下新建布局文件tab_list.xml,此布局文件中主要使用Tablist組件,并設(shè)置其樣式。 編寫AbilitySlice文件在src/main/java
    發(fā)表于 10-09 14:13

    鴻蒙應(yīng)用開發(fā)的JS UI框架如何實現(xiàn)高德地圖的訪問?

    鴻蒙應(yīng)用,現(xiàn)在分為Java UI框架和Ark UI框架,其中JS UI開發(fā)者
    發(fā)表于 04-28 11:44

    求助!請問如何在JS UI項目里增加java UI頁面?

    項目用的js UI,視頻解碼無法在js視頻播放;想增加一個java UI的視頻播放器?或者視頻編解碼的其他解決方案?
    發(fā)表于 05-10 10:48

    DevEco Studio里的java UI框架有沒有必要做拖拽式編程呢?

      DevEco Studio已經(jīng)支持js UI框架拖拽式編程,你覺得java UI框架有沒有必要做拖拽式編程呢?
    發(fā)表于 05-18 15:32

    CSS框架:Semantic UI的優(yōu)缺點

    作為一名全棧開發(fā)人員,Jack Lukic使用自然語言原理創(chuàng)建了Semantic UI框架。憑借著jQuery和LESS功能,Semantic UI提供了光滑、平整且精細的外觀,以及輕量級的用戶
    的頭像 發(fā)表于 07-01 16:06 ?1.4w次閱讀

    在HarmonyOS版本下如何基于JS UI框架來開發(fā)?

    作者:zhenyu ,華為軟件開發(fā)工程師 在當前HarmonyOS版本下,如何基于JS UI框架來開發(fā)呢? 1JS UI框架下FA與PA交互的使用場景通常一個典型使用JS
    的頭像 發(fā)表于 07-13 09:24 ?2134次閱讀

    深入解析UI框架簡介以及業(yè)界發(fā)展趨勢

    作者:yuzhiqiang、sunfei、wanglei,華為軟件架構(gòu)工程師UI 框架簡介以及業(yè)界發(fā)展趨勢 UI,即用戶界面,主要包含視覺(比如圖像、文字、動畫等可視化內(nèi)容)以及交互(比如按鈕點擊
    的頭像 發(fā)表于 08-04 14:25 ?5594次閱讀
    深入解析<b class='flag-5'>UI</b><b class='flag-5'>框架</b>簡介以及業(yè)界發(fā)展趨勢

    全面解讀HarmonyOS新一代UI框架

    作者:yuzhiqiang,UI編程框架首席技術(shù)專家 在Harmony 3.0.0開發(fā)者預(yù)覽版中,包含了新一代的聲明式UI框架ArkUI 3.0、多語言跨平臺編譯器ArkCompile
    的頭像 發(fā)表于 10-29 10:21 ?2630次閱讀
    全面解讀HarmonyOS新一代<b class='flag-5'>UI</b><b class='flag-5'>框架</b>

    基于Java的接口快速開發(fā)框架——magic-api

    magic-api 是一個基于Java的接口快速開發(fā)框架,編寫接口將通過magic-api提供的UI界面完成,自動映射為HTTP接口,無需定義Controller、Service、Dao、Mapper、XML、VO等
    發(fā)表于 07-19 11:42 ?873次閱讀
    基于<b class='flag-5'>Java</b>的接口快速開發(fā)<b class='flag-5'>框架</b>——magic-api

    基于springboot和vue框架Java

    本文將詳細介紹基于Spring Boot和Vue框架進行Java應(yīng)用開發(fā)的實踐。首先,將介紹Spring Boot和Vue框架的基本概念及其優(yōu)點。然后,將詳細介紹如何搭建Spring Boot
    的頭像 發(fā)表于 12-03 15:15 ?942次閱讀