【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記

#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記

 1. Page Ability概述html


Page Ability是FA惟一支持的Ability,本質上是一個窗口,相似於Android的Activity,用於提供與用戶交互的能力。爲了方便,在後面的內容就將Page Ability簡稱爲Page。另外,HarmonyOS還提供了一個AbilitySlice。AbilitySlice的功能與Page相似,只是在切換時能夠在同一個Page內完成。若是從Page到Page,至關於Web頁面用新窗口導航到另外一個頁面。若是從AbilitySlice切換到AbilitySlice,至關於Web頁面以同一個窗口的方式導航到另外一個頁面。java


一個Page能夠不使用AbilitySlice,也可使用一個或多個AbilitySlice,在建立HarmonyOS工程時,生成的Demo代碼中包含了一個默認的AbilitySlice(MainAbilitySlice.java)。圖1 是Page和AbilitySlice的關係。
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記圖1 Page與AbilitySlice的關係json


若是在Page中使用多個AbilitySlice,那麼這些AbilitySlice提供的業務能力應高度相關。下面是一個典型的應用場景:數組


在線視頻播放器的主界面能夠用一個Page來實現,在主界面中包含了兩個AbilitySlice:一個AbilitySlice用於展現視頻列表,另外一個AbilitySlice用於播放視頻。ide


在DevEco Studio中建立HarmonyOS工程時,IDE會提供一些Page模板,如圖2所示。經過這些Page模板,能夠生成HarmonyOS工程的骨架代碼,其中會包含一些簡單的例子,至關於HelloWorld。佈局

image.png#圖2 建立HarmonyOS工程時的提供的Page模板post


DevEco Studio提供了自動建立Page Ability的功能,在建立的過程當中會自動向config.json文件中添加相應的配置信息。不過爲了更深刻理解Page Ability的建立和使用過程,本節將用純手工的方式建立一個Page Ability。學習


2. 手動建立Page Ability類spa


Page Ability是一個普通的Java類,因此咱們首先應該建立一個Java類,本例建立的Java類是FirstAbility。任何一個Page Ability類都必須從Ability類繼承,該類屬於ohos.aafwk.ability包,因此FirstAbility的最終形式以下:
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記orm

3. 在config.json文件中註冊Page Ability


在HarmonyOS App中,任何一個可用的Page Ability,都必須在config.json文件中註冊。Page Ability須要在config.json文件中的abilities部分註冊。abilities是一個對象數組,每個元素是一個對象,表示一個Ability(包括Page Ability、Data Ability和Service Ability)。FirstAbility的配置代碼以下:
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記
在建立HarmonyOS工程時,IDE已經自動在config.json文件中添加了MainAbility的註冊信息,讀者能夠照葫蘆畫瓢,將MainAbility的註冊代碼複製一份,而後略做修改。


這裏主要修改了actions、name和label屬性。actions表示一個或多個與Page Ability關聯的動做,能夠經過這些action來調用當前的Page Ability。name指定了Page Ability類的全名,本例是com.unitymarvel.demo.FirstAbility。label用於指定窗口的標題文本。


4. 建立佈局文件


HarmonyOS App既能夠用Java代碼動態建立組件的方式佈局,也可使用佈局文件。本例使用佈局文件的方式進行佈局,這也是我推薦的佈局方式。由於使用Java代碼建立複雜的佈局很是困難,並且代碼量比較大,代碼難以維護。
HarmonyOS工程的全部佈局文件都放在resources/base/layout目錄中,如今建立一個first_layout.xml文件,並輸入下面的代碼:
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記

關於佈局的更多內容在後面的章節會詳細討論,這裏只要知道,first_layout.xml文件中使用了方向佈局,並且是垂直方向。在垂直方向上從上到下放置了3個組件,分別是Button一、Text和Button2。


5. 裝載佈局文件


建立完佈局文件後,須要與Page Ability關聯才能顯示佈局中的組件。一般須要在Page Ability啓動時裝載佈局文件,這就要使用到Page Ability的生命週期方法onStart,該方法會在Page Ability開始時調用,一般在onStart方法中作一些初始化的工做,例如,爲組件指定事件監聽器。
如今須要在FirstAbility類中添加一個onStart方法,並使用super.setUIContent方法裝載佈局文件,代碼以下:
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記在HarmonyOS App中,任何形式的資源都會與一個int類型的值綁定,以便經過該值引用資源,這些值都在ResourceTable類中以常量(static final形式的變量)形式存在。這些值都是自動生成的,一般以資源文件名做爲變量名,前面加上前綴。佈局文件的前綴是Layout。如本例的佈局文件是first_layout.xml,因此生成的ID是Layout_first_layout。根據這個生成規則,要求資源文件的命名必須符合Java標識符的命名規則,不然沒法在ResourceTable類中生成ID。


6. 顯示Page Ability


到如今爲止,一個最小的,並且是完整的Page Ability已經完成了,最後一步就是顯示這個Page Ability。若是想讓FirstAbility做爲主Ability顯示(HarmonyOS App運行後顯示的第1個Page Ability),能夠修改FirstAbility配置信息中的skills部分,將其改爲以下形式:
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記但要主要,可能在config.json文件中還有其餘Page Ability的actions也設爲action.system.home。而HarmonyOS只會顯示在config.json文件中遇到的第一個主Ability。因此要麼將FirstAbility的註冊信息調整爲abilities的第1個元素,要麼註釋掉其餘的action.system.home。
若是想在其餘的Page Ability中顯示FirstAbility,須要使用下面的代碼。

#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記無論使用哪一種方式,FirstAbility的效果都會如圖3所示。
#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記圖3 FirstAbility的顯示效果


7. 銷燬Page Ability


在Page Ability用完後,就須要關閉Page Ability,或稱爲銷燬Page Ability,只須要調用下面的代碼便可銷燬Page Ability。

#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記該方法屬於Ability,若是在AbilitySlice(在後面介紹)中調用該方法,須要先得到包含AbilitySlice的Ability對象。

歡迎訪問李寧老師的【鴻蒙基地】專欄:https://harmonyos.51cto.com/column/17#bkwz

李寧老師的課程主頁:https://edu.51cto.com/lecturer/974126.html#bkwz

文章後續內容和相關附件能夠點擊下面的原文連接前往學習

原文連接:https://harmonyos.51cto.com/posts/2428#bkwz


想了解更多關於鴻蒙的內容,請訪問:

51CTO和華爲官方戰略合做共建的鴻蒙技術社區

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


#2020徵文-TV#【鴻蒙基地】鴻蒙從窗口開始:Page Ability誕生記

相關文章
相關標籤/搜索