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

鴻蒙HarmonyOS之AbilitySlice間導航

系統 OpenHarmony
本節主要演示,在一個Page包含多個AbilitySlice時,這些AbilitySlice之間是如何路由和導航的。

[[373546]]

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

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

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

Page模板(以下簡稱“Page”)是FA唯一支持的模板,用于提供與用戶交互的能力。一個Page可以由一個或多個AbilitySlice構成,AbilitySlice是指應用的單個頁面及其控制邏輯的總和。

當一個Page由多個AbilitySlice共同構成時,這些AbilitySlice頁面提供的業務能力應具有高度相關性。例如,新聞瀏覽功能可以通過一個Page來實現,其中包含了兩個AbilitySlice:一個AbilitySlice用于展示新聞列表,另一個AbilitySlice用于展示新聞詳情。

本節主要演示,在一個Page包含多個AbilitySlice時,這些AbilitySlice之間是如何路由和導航的。

創建應用

采用Car設備類型,創建一個AbilitySliceNavigation應用。該應用主要用于測試AbilitySlice之間的路由和導航。

創建多個AbilitySlice

在初始化應用時,AbilitySliceNavigation應用已經包含了一個主AbilitySlice,即為

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3. @Override 
  4.  
  5. public void onStart(Intent intent) { 
  6.  
  7. super.onStart(intent); 
  8.  
  9. super.setUIContent(ResourceTable.Layout_ability_main); 
  10.  
  11.  
  12. @Override 
  13.  
  14. public void onActive() { 
  15.  
  16. super.onActive(); 
  17.  
  18.  
  19. @Override 
  20.  
  21. public void onForeground(Intent intent) { 
  22.  
  23. super.onForeground(intent); 
  24.  
  25.  

 因此,還需要再新增一個AbilitySlice。我們復制MainAbilitySlice的代碼,創建了一個PayAbilitySlice。目前,MainAbilitySlice和PayAbilitySlice的代碼是完全相同的。

新增PayAbilitySlice樣式布局

為了體現MainAbilitySlice和PayAbilitySlice的不同,我們需要在“面子”上“整容”一下。我們在layout目錄下,新建了一個ability_pay.xml,如下圖所示


ability_pay.xml內容如下:

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_parent" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:id="$+id:text_pay" 
  11.  
  12. ohos:height="match_parent" 
  13.  
  14. ohos:width="match_content" 
  15.  
  16. ohos:background_element="$graphic:background_ability_main" 
  17.  
  18. ohos:layout_alignment="horizontal_center" 
  19.  
  20. ohos:text="Pay me the money" 
  21.  
  22. ohos:text_size="50" 
  23.  
  24. /> 
  25.  
  26. ability_pay.xml基本上是從ability_main.xml上復制過去的。主要的差異點是: 
  27.  
  28. l id設置為了$+id:text_pay 
  29.  
  30. l text設置為了Pay me the money 

 設置PayAbilitySlice樣式布局

設置了ability_pay.xml之后,如來來使用這個樣式布局呢?參考如下代碼,在通過super.setUIContent()來指定新增的樣式布局即可:

  1. public class PayAbilitySlice extends AbilitySlice { 
  2.  
  3. @Override 
  4.  
  5. public void onStart(Intent intent) { 
  6.  
  7. super.onStart(intent); 
  8.  
  9. // 指定UI 
  10.  
  11. super.setUIContent(ResourceTable.Layout_ability_pay); 
  12.  
  13.  
  14. @Override 
  15.  
  16. public void onActive() { 
  17.  
  18. super.onActive(); 
  19.  
  20.  
  21. @Override 
  22.  
  23. public void onForeground(Intent intent) { 
  24.  
  25. super.onForeground(intent); 
  26.  
  27.  

 如何實現AbilitySlice之間的路由和導航

設置路由

在MainAbility中,通過addActionRoute方法來添加到PayAbilitySlice的路由。

  1. public class MainAbility extends Ability { 
  2.  
  3. @Override 
  4.  
  5. public void onStart(Intent intent) { 
  6.  
  7. super.onStart(intent); 
  8.  
  9. // 指定默認顯示的AbilitySlice 
  10.  
  11. super.setMainRoute(MainAbilitySlice.class.getName()); 
  12.  
  13. // 使用addActionRounte方法添加路由。 
  14.  
  15. addActionRoute("action.pay", PayAbilitySlice.class.getName()); 
  16.  
  17.  

 在config.json的actions數組中沒添加"action.pay",配置如下:

  1. "abilities": [ 
  2.  
  3.  
  4. "skills": [ 
  5.  
  6.  
  7. "entities": [ 
  8.  
  9. "entity.system.home" 
  10.  
  11. ], 
  12.  
  13. "actions": [ 
  14.  
  15. "action.system.home"
  16.  
  17. "action.pay" 
  18.  
  19.  
  20.  
  21. ], 
  22.  
  23. "orientation""landscape"
  24.  
  25. "name""com.waylau.hmos.abilityslicenavigation.MainAbility"
  26.  
  27. "icon""$media:icon"
  28.  
  29. "description""$string:mainability_description"
  30.  
  31. "label""AbilitySliceNavigation"
  32.  
  33. "type""page"
  34.  
  35. "launchType""standard" 
  36.  
  37.  

 設置點擊事件觸發導航

在MainAbilitySlice中,為文本設置了點擊事件,已觸發導航到PayAbilitySlice,代碼如下:

  1. package com.waylau.hmos.abilityslicenavigation.slice; 
  2.  
  3. import com.waylau.hmos.abilityslicenavigation.ResourceTable; 
  4.  
  5. import ohos.aafwk.ability.AbilitySlice; 
  6.  
  7. import ohos.aafwk.content.Intent; 
  8.  
  9. import ohos.agp.colors.RgbColor; 
  10.  
  11. import ohos.agp.components.Button; 
  12.  
  13. import ohos.agp.components.DirectionalLayout; 
  14.  
  15. import ohos.agp.components.Text; 
  16.  
  17. import ohos.agp.components.element.ShapeElement; 
  18.  
  19. public class MainAbilitySlice extends AbilitySlice { 
  20.  
  21. @Override 
  22.  
  23. public void onStart(Intent intent) { 
  24.  
  25. super.onStart(intent); 
  26.  
  27. // 指定UI 
  28.  
  29. super.setUIContent(ResourceTable.Layout_ability_main); 
  30.  
  31. // 添加點擊事件來觸發導航 
  32.  
  33. Text text = (Text) findComponentById(ResourceTable.Id_text_helloworld); 
  34.  
  35. text.setClickedListener(listener -> 
  36.  
  37. present(new PayAbilitySlice(), new Intent())); 
  38.  
  39.  
  40. @Override 
  41.  
  42. public void onActive() { 
  43.  
  44. super.onActive(); 
  45.  
  46.  
  47. @Override 
  48.  
  49. public void onForeground(Intent intent) { 
  50.  
  51. super.onForeground(intent); 
  52.  
  53.  

 同理,在PayAbilitySlice中,為文本設置了點擊事件,已觸發導航到MainAbilitySlice,代碼如下: 

  1. package com.waylau.hmos.abilityslicenavigation.slice; 
  2.  
  3. import com.waylau.hmos.abilityslicenavigation.ResourceTable; 
  4.  
  5. import ohos.aafwk.ability.AbilitySlice; 
  6.  
  7. import ohos.aafwk.content.Intent; 
  8.  
  9. import ohos.agp.colors.RgbColor; 
  10.  
  11. import ohos.agp.components.Button; 
  12.  
  13. import ohos.agp.components.DirectionalLayout; 
  14.  
  15. import ohos.agp.components.Text; 
  16.  
  17. import ohos.agp.components.element.ShapeElement; 
  18.  
  19. public class PayAbilitySlice extends AbilitySlice { 
  20.  
  21. @Override 
  22.  
  23. public void onStart(Intent intent) { 
  24.  
  25. super.onStart(intent); 
  26.  
  27. // 指定UI 
  28.  
  29. super.setUIContent(ResourceTable.Layout_ability_pay); 
  30.  
  31. // 添加點擊事件來觸發導航 
  32.  
  33. Text text = (Text) findComponentById(ResourceTable.Id_text_pay); 
  34.  
  35. text.setClickedListener(listener -> 
  36.  
  37. present(new MainAbilitySlice(), new Intent())); 
  38.  
  39.  
  40. @Override 
  41.  
  42. public void onActive() { 
  43.  
  44. super.onActive(); 
  45.  
  46.  
  47. @Override 
  48.  
  49. public void onForeground(Intent intent) { 
  50.  
  51. super.onForeground(intent); 
  52.  
  53.  

 運行

運行應用,點擊文本"Hello World"后,可以切換到“Pay me the money”,再點擊文本“Pay me the money”,可以切換到“Hello World”。至此實現了多個AbilitySlice之間的路由和導航。

源碼

源碼見 https://github.com/waylau/harmonyos-tutorial

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

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

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

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

 

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

2021-09-17 14:43:54

鴻蒙HarmonyOS應用

2020-11-17 11:48:44

HarmonyOS

2020-11-25 12:02:02

TableLayout

2021-07-01 09:19:56

鴻蒙HarmonyOS應用

2025-06-17 18:05:12

SDK鴻蒙版騰訊

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2021-06-28 14:41:36

鴻蒙HarmonyOS應用

2012-06-07 09:33:13

Windows Pho

2021-09-18 14:45:26

鴻蒙HarmonyOS應用

2017-08-07 20:18:11

Android線程handler

2021-01-04 10:03:28

鴻蒙手機app開發顯示系統圖片

2020-11-24 11:58:19

HarmonyOS

2020-10-22 10:08:06

韋東山STM32MP157鴻蒙

2021-01-05 10:35:04

鴻蒙HarmonyOS應用開發

2020-11-09 11:56:49

HarmonyOS

2023-11-30 08:37:04

JSX服務端結構

2021-11-09 09:43:52

鴻蒙HarmonyOS應用

2016-12-07 10:18:44

移動應用開發底部導航android

2016-12-07 10:27:16

移動應用開發底部導航android

2015-09-11 09:15:32

RyuSDN
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美vide | 亚洲综合色视频在线观看 | 91精品国产91久久久久久最新 | 9191av| 韩国精品一区二区三区 | 欧美男人天堂 | 国产精品99久久久久久久久久久久 | 在线一区 | 在线视频一区二区三区 | 亚洲一区在线播放 | 国产精品国产三级国产播12软件 | 午夜影视网| 四虎影院欧美 | 亚洲美女一区 | 欧美视频在线播放 | 三级免费网 | 欧美日韩高清在线一区 | 午夜精品久久久久久久久久久久 | 精品一区电影 | 91精品国产99 | 国产伦精品一区二区三区高清 | www.日韩| 天堂资源 | 日韩日韩日韩日韩日韩日韩日韩 | 一级黄色毛片免费 | 久久国产精品精品国产色婷婷 | 91精品国产色综合久久不卡98 | 国产日韩欧美在线 | 国产日韩欧美精品 | 日日摸日日碰夜夜爽2015电影 | 午夜影院网站 | 国产激情综合五月久久 | 国产精品福利在线观看 | 99这里只有精品视频 | 国产一区二区自拍 | 午夜视频网 | 少妇黄色| 91免费视频观看 | 午夜精品久久久久久久久久久久久 | 日韩在线电影 | 美女精品一区 |