自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙HarmonyOS之AbilitySlice間導(dǎo)航

系統(tǒng) OpenHarmony
本節(jié)主要演示,在一個(gè)Page包含多個(gè)AbilitySlice時(shí),這些AbilitySlice之間是如何路由和導(dǎo)航的。

[[373546]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

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

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

當(dāng)一個(gè)Page由多個(gè)AbilitySlice共同構(gòu)成時(shí),這些AbilitySlice頁面提供的業(yè)務(wù)能力應(yīng)具有高度相關(guān)性。例如,新聞瀏覽功能可以通過一個(gè)Page來實(shí)現(xiàn),其中包含了兩個(gè)AbilitySlice:一個(gè)AbilitySlice用于展示新聞列表,另一個(gè)AbilitySlice用于展示新聞詳情。

本節(jié)主要演示,在一個(gè)Page包含多個(gè)AbilitySlice時(shí),這些AbilitySlice之間是如何路由和導(dǎo)航的。

創(chuàng)建應(yīng)用

采用Car設(shè)備類型,創(chuàng)建一個(gè)AbilitySliceNavigation應(yīng)用。該應(yīng)用主要用于測(cè)試AbilitySlice之間的路由和導(dǎo)航。

創(chuàng)建多個(gè)AbilitySlice

在初始化應(yīng)用時(shí),AbilitySliceNavigation應(yīng)用已經(jīng)包含了一個(gè)主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.  

 因此,還需要再新增一個(gè)AbilitySlice。我們復(fù)制MainAbilitySlice的代碼,創(chuàng)建了一個(gè)PayAbilitySlice。目前,MainAbilitySlice和PayAbilitySlice的代碼是完全相同的。

新增PayAbilitySlice樣式布局

為了體現(xiàn)MainAbilitySlice和PayAbilitySlice的不同,我們需要在“面子”上“整容”一下。我們?cè)趌ayout目錄下,新建了一個(gè)ability_pay.xml,如下圖所示


ability_pay.xml內(nèi)容如下:

  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上復(fù)制過去的。主要的差異點(diǎn)是: 
  27.  
  28. l id設(shè)置為了$+id:text_pay 
  29.  
  30. l text設(shè)置為了Pay me the money 

 設(shè)置PayAbilitySlice樣式布局

設(shè)置了ability_pay.xml之后,如來來使用這個(gè)樣式布局呢?參考如下代碼,在通過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.  

 如何實(shí)現(xiàn)AbilitySlice之間的路由和導(dǎo)航

設(shè)置路由

在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. // 指定默認(rèn)顯示的AbilitySlice 
  10.  
  11. super.setMainRoute(MainAbilitySlice.class.getName()); 
  12.  
  13. // 使用addActionRounte方法添加路由。 
  14.  
  15. addActionRoute("action.pay", PayAbilitySlice.class.getName()); 
  16.  
  17.  

 在config.json的actions數(shù)組中沒添加"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.  

 設(shè)置點(diǎn)擊事件觸發(fā)導(dǎo)航

在MainAbilitySlice中,為文本設(shè)置了點(diǎn)擊事件,已觸發(fā)導(dǎo)航到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. // 添加點(diǎn)擊事件來觸發(fā)導(dǎo)航 
  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中,為文本設(shè)置了點(diǎn)擊事件,已觸發(fā)導(dǎo)航到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. // 添加點(diǎn)擊事件來觸發(fā)導(dǎo)航 
  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.  

 運(yùn)行

運(yùn)行應(yīng)用,點(diǎn)擊文本"Hello World"后,可以切換到“Pay me the money”,再點(diǎn)擊文本“Pay me the money”,可以切換到“Hello World”。至此實(shí)現(xiàn)了多個(gè)AbilitySlice之間的路由和導(dǎo)航。

源碼

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

©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

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

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-09-17 14:43:54

鴻蒙HarmonyOS應(yīng)用

2020-11-17 11:48:44

HarmonyOS

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2020-11-25 12:02:02

TableLayout

2021-07-01 09:19:56

鴻蒙HarmonyOS應(yīng)用

2012-06-07 09:33:13

Windows Pho

2021-06-28 14:41:36

鴻蒙HarmonyOS應(yīng)用

2021-01-05 10:35:04

鴻蒙HarmonyOS應(yīng)用開發(fā)

2017-08-07 20:18:11

Android線程handler

2021-09-18 14:45:26

鴻蒙HarmonyOS應(yīng)用

2021-06-25 15:04:31

鴻蒙HarmonyOS應(yīng)用

2020-11-10 10:00:10

HarmonyOS

2023-11-30 08:37:04

JSX服務(wù)端結(jié)構(gòu)

2020-12-30 11:08:50

鴻蒙HarmonyOShelloWorld

2021-01-04 10:03:28

鴻蒙手機(jī)app開發(fā)顯示系統(tǒng)圖片

2016-12-07 10:27:16

移動(dòng)應(yīng)用開發(fā)底部導(dǎo)航android

2016-12-07 10:18:44

移動(dòng)應(yīng)用開發(fā)底部導(dǎo)航android

2015-09-11 09:15:32

RyuSDN

2020-10-22 10:08:06

韋東山STM32MP157鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)