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

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

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

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

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

1

Position Layout

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

PositionLayout示意圖:

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

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

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

使用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è)置子組件的坐標(biāo)時(shí)(position_x和position_y屬性),除了上述示例中的XML方式,還可以在對(duì)應(yīng)的AbilitySlice中通過(guò)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);
    }
對(duì)于超過(guò)布局本身大小的組件,超出部分將不顯示。

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)布局能力,主要用于相同級(jí)別的多個(gè)組件需要在不同屏幕尺寸設(shè)備上自動(dòng)調(diào)整列數(shù)的場(chǎng)景。

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

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

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

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

AdaptiveBox Layout示意圖:

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

AdaptiveBox Layout布局常用方法如下:

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

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

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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

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

    關(guān)注

    0

    文章

    15

    瀏覽量

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

    關(guān)注

    0

    文章

    3

    瀏覽量

    5967
  • Layout設(shè)計(jì)
    +關(guān)注

    關(guān)注

    1

    文章

    13

    瀏覽量

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

    關(guān)注

    0

    文章

    3

    瀏覽量

    996

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    輕量級(jí)的ui框架如何去制作

    原創(chuàng)分享:自制輕量級(jí)單片機(jī)UI框架框架元素用戶接口代碼開(kāi)源平時(shí)??碿sdn,但是從來(lái)沒(méi)有自己寫(xiě)過(guò)。正好這幾天需要用單片機(jī)做一個(gè)簡(jiǎn)易的ui界面,于是自己寫(xiě)了一個(gè)輕量級(jí)的
    發(fā)表于 07-14 07:39

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

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

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

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

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

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

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

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

    求助!請(qǐng)問(wèn)如何在JS UI項(xiàng)目里增加java UI頁(yè)面?

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

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

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

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

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

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

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

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

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

    全面解讀HarmonyOS新一代UI框架

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

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

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

    基于springboot和vue框架Java

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