成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鴻蒙HarmonyOS三方件開發指南(1)-PrecentPositionLayout

開發 OpenHarmony
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[375329]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

1. PrecentPositionLayout功能介紹

1.1. 組件介紹:

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

其中PositionLayout中組件的位置是以絕對像素點定義的,無法實現根據屏幕的大小自適應。因此,引入一種以百分比方式定義的PrecentPositionLayout布局容器,通過它可以很方便的實現屏幕自適應。

1.2. 手機模擬器上運行效果:


2. PrecentPositionLayout使用方法

2.1. 新建工程,增加組件Har包依賴

在應用模塊中調用HAR,只需要將precentpositionlayout.har復制到entry\libs目錄下即可(由于build.gradle中已經依賴libs目錄下的*.har,因此不需要再做修改)。

2.2. 修改主頁面的布局文件

修改主頁面的布局文件ability_main.xml,將跟組件容器修改為com.isoftstone.precentpositionlayout.PrecentPositionLayout,然后再增加5個Text組件,分別位于屏幕的左上,左下,右上,右下和中間,每個組件的長度和寬度都占屏幕的25%。修改后代碼如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3.   
  4.  
  5. <com.isoftstone.precentpositionlayout.PrecentPositionLayout 
  6.  
  7.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  8.  
  9.     ohos:height="match_parent" 
  10.  
  11.     ohos:width="match_parent"
  12.  
  13.   
  14.  
  15.     <Text 
  16.  
  17.         ohos:id="$+id:text_helloworld" 
  18.  
  19.         ohos:height="250" 
  20.  
  21.         ohos:width="250" 
  22.  
  23.         ohos:left_margin="0" 
  24.  
  25.         ohos:top_margin="0" 
  26.  
  27.         ohos:background_element="$graphic:background_text" 
  28.  
  29.         ohos:text="左上25%" 
  30.  
  31.         ohos:text_size="50" 
  32.  
  33.         /> 
  34.  
  35.   
  36.  
  37.     <Text 
  38.  
  39.         ohos:id="$+id:text_helloworld" 
  40.  
  41.         ohos:height="250" 
  42.  
  43.         ohos:width="250" 
  44.  
  45.         ohos:left_margin="750" 
  46.  
  47.         ohos:top_margin="0" 
  48.  
  49.         ohos:background_element="$graphic:background_text" 
  50.  
  51.         ohos:text="右上25%" 
  52.  
  53.         ohos:text_size="50" 
  54.  
  55.         /> 
  56.  
  57.   
  58.  
  59.     <Text 
  60.  
  61.         ohos:id="$+id:text_helloworld" 
  62.  
  63.         ohos:height="250" 
  64.  
  65.         ohos:width="250" 
  66.  
  67.         ohos:left_margin="0" 
  68.  
  69.         ohos:top_margin="750" 
  70.  
  71.         ohos:background_element="$graphic:background_text" 
  72.  
  73.         ohos:text="左下25%" 
  74.  
  75.         ohos:text_size="50" 
  76.  
  77.         /> 
  78.  
  79.   
  80.  
  81.     <Text 
  82.  
  83.         ohos:id="$+id:text_helloworld" 
  84.  
  85.         ohos:height="250" 
  86.  
  87.         ohos:width="250" 
  88.  
  89.         ohos:left_margin="750" 
  90.  
  91.         ohos:top_margin="750" 
  92.  
  93.         ohos:background_element="$graphic:background_text" 
  94.  
  95.         ohos:text="右下25%" 
  96.  
  97.         ohos:text_size="50" 
  98.  
  99.         /> 
  100.  
  101.   
  102.  
  103.     <Text 
  104.  
  105.         ohos:id="$+id:text_helloworld" 
  106.  
  107.         ohos:height="250" 
  108.  
  109.         ohos:width="250" 
  110.  
  111.         ohos:left_margin="375" 
  112.  
  113.         ohos:top_margin="375" 
  114.  
  115.         ohos:background_element="$graphic:background_text" 
  116.  
  117.         ohos:text="中心25%" 
  118.  
  119.         ohos:text_size="50" 
  120.  
  121.         /> 
  122.  
  123.   
  124.  
  125. </com.isoftstone.precentpositionlayout.PrecentPositionLayout> 

 2.3. 增加Text組件的背景資源文件

為方便觀察,上一步我們將Text組件設置了一個繪制背景graphic:background_text。

這里需要在resources/base/grahic目錄下新增一個可繪制資源文件。

右鍵點擊graphic,選擇New-File,文件名輸入background_text.xml。


文件內容如下:(可復制background_ability_main.xml的內容,修改color值即可)

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2.  
  3. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.  
  5.        ohos:shape="rectangle"
  6.  
  7.     <solid 
  8.  
  9.         ohos:color="#00FFFF"/> 
  10.  
  11. </shape> 

 2.4. 修改MainAbilitySlince的UI加載代碼

在MainAbilitySlince類的onStart函數中,增加如下代碼。

  1. public void onStart(Intent intent) { 
  2.  
  3.     super.onStart(intent); 
  4.  
  5.     // 解析xml獲得PrecentPositionLayout對象 
  6.  
  7.     PrecentPositionLayout precentPositionLayout = (PrecentPositionLayout) LayoutScatter.getInstance(getContext()).parse(ResourceTable.Layout_ability_main, nullfalse); 
  8.  
  9.   
  10.  
  11.     // 自動調整組件的百分比 
  12.  
  13.     precentPositionLayout.AutoSize(); 
  14.  
  15.   
  16.  
  17.     // 設置到UI 
  18.  
  19.     super.setUIContent(precentPositionLayout); 
  20.  
  21.     //super.setUIContent(ResourceTable.Layout_ability_main); 
  22.  

 3. PrecentPositionLayout開發實現

3.1. 新建一個Module

新建一個Module,類型選擇HarmonyOS Library,模塊名為precentpositionlayout,如圖:


3.2. 新建一個PrecentPositionLayout類

新建一個PrecentPositionLayout類,繼承自PositionLayout類,并增加AutoSize()方法。

  1. /* 調整各組件的大小,按照百分比調整 
  2.  
  3.  *  將原來組件的起始位置,寬度和高度都視作相對于整個屏幕的百分比值,然后根據屏幕的分辨率轉換為實際的像素值。 
  4.  
  5.  *  注:考慮到使用0-100配置百分比的話,范圍太小不夠精確,因此配置范圍設置為0-1000, 
  6.  
  7.  *  比如當前屏幕是1920 * 1060, 某個組件的寬度和高度配置的是200,則表示改組件的寬和高都占整個屏幕的20%。 
  8.  
  9.  *  因此,調整后改組件的實際大小為384 * 212. 
  10.  
  11.  */ 
  12.  
  13. public void AutoSize() { 
  14.  
  15.     // 獲取屏幕分辨率 
  16.  
  17.     Optional<Display> display = DisplayManager.getInstance().getDefaultDisplay(this.getContext()); 
  18.  
  19.     Point pt = new Point(); 
  20.  
  21.     display.get().getSize(pt); 
  22.  
  23.   
  24.  
  25.     // 去除上面標題欄和下面導航欄的高度 
  26.  
  27.     pt.modify(pt.getPointX(), pt.getPointY() - 160); 
  28.  
  29.   
  30.  
  31.     // 調增各組件的大小 
  32.  
  33.     int childCount = getChildCount(); 
  34.  
  35.     for (int i = 0; i < childCount; i++) { 
  36.  
  37.         Component component = getComponentAt(i); 
  38.  
  39.         ComponentContainer.LayoutConfig config = component.getLayoutConfig(); 
  40.  
  41.         component.setLeft(config.getMarginLeft() * pt.getPointXToInt() / 1000); 
  42.  
  43.         component.setTop(config.getMarginTop() * pt.getPointYToInt() / 1000); 
  44.  
  45.         component.setWidth(config.width * pt.getPointXToInt()  / 1000); 
  46.  
  47.         component.setHeight(config.height * pt.getPointYToInt()  / 1000); 
  48.  
  49.     } 
  50.  
  51.   

 3.3. 編譯HAR包

利用Gradle可以將HarmonyOS Library庫模塊構建為HAR包,構建HAR包的方法如下:

在Gradle構建任務中,雙擊PackageDebugHar或PackageReleaseHar任務,構建Debug類型或Release類型的HAR。

待構建任務完成后,可以在PrecentPositionLayout> bulid > outputs > har目錄中,獲取生成的HAR包。


項目源代碼地址:https://github.com/isoftstone-dev/PersentPositionLayout_HarmonOS

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-03-01 09:48:24

鴻蒙HarmonyOS應用開發

2021-02-24 15:22:47

鴻蒙HarmonyOS應用開發

2021-02-04 13:06:38

鴻蒙HarmonyOS應用開發

2021-04-16 09:28:18

鴻蒙HarmonyOS應用

2021-06-28 14:48:03

鴻蒙HarmonyOS應用

2021-01-18 09:52:20

鴻蒙HarmonyOS開發

2021-02-26 14:15:27

鴻蒙HarmonyOS應用開發

2021-02-04 09:45:19

鴻蒙HarmonyOS應用開發

2021-01-21 13:21:18

鴻蒙HarmonyOSPhotoview組件

2021-01-12 12:04:40

鴻蒙HarmonyOS應用開發

2021-01-20 09:54:56

鴻蒙HarmonyOS開發

2021-03-01 14:01:41

鴻蒙HarmonyOS應用開發

2021-05-12 15:17:39

鴻蒙HarmonyOS應用

2021-03-31 09:50:25

鴻蒙HarmonyOS應用開發

2021-01-22 17:33:03

鴻蒙HarmonyOS應用開發

2021-04-12 09:36:54

鴻蒙HarmonyOS應用

2021-03-19 17:42:01

鴻蒙HarmonyOS應用開發

2021-04-20 09:42:20

鴻蒙HarmonyOS應用開發

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2023-02-07 15:43:13

三方庫適配鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一级 | 日韩在线播放一区 | 国产精品一区二区不卡 | 久久视频一区 | 欧美a区| 欧美一区二区三区在线观看 | 国产乱码久久久久久一区二区 | 伊人伊成久久人综合网站 | 亚洲成av人影片在线观看 | 蜜臀久久99精品久久久久久宅男 | 日韩av在线免费 | 日韩av一区在线观看 | 涩涩导航| www.色综合 | 午夜欧美日韩 | 中文字幕精品视频 | 欧美日韩综合 | 中文字幕国产视频 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 成人久久 | 国产成人精品久久二区二区91 | 亚洲精品在线视频 | 91中文 | 亚洲va欧美va天堂v国产综合 | 狠狠色狠狠色综合系列 | 亚洲视频一 | 国产精品亚洲一区二区三区在线观看 | 国产精品久久久久久影院8一贰佰 | 国产电影一区二区在线观看 | 91资源在线观看 | 激情一区二区三区 | 国产精品欧美精品日韩精品 | 国产精品日韩欧美 | 一区二区三区小视频 | 97人澡人人添人人爽欧美 | 国产精品91久久久久久 | 99精品国产一区二区青青牛奶 | 黄色小视频入口 | 欧美成人一级 | 超碰导航 | 狠狠干五月天 |