熟悉HarmonyOS(鴻蒙)的小夥伴都知道,鴻蒙應用是基於Ability的,一個鴻蒙應用可以包含多個Ability。
Ability框架模型具有兩種形態:
- 第一種形態爲FA模型。API 8及其更早版本的應用程序只能使用FA模型進行開發。FA模型將Ability分爲FA(Feature Ability)和PA(Particle Ability)兩種類型,其中FA支持Page Ability,PA支持Service Ability、Data Ability、以及FormAbility。
- 第二種形態爲Stage模型。從API 9開始,Ability框架引入了Stage模型作爲第二種應用框架形態,Stage模型將Ability分爲PageAbility和ExtensionAbility兩大類,其中ExtensionAbility又被擴展爲ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility,以便滿足更多的使用場景。
從Ability的兩種形態可以看出,作爲客戶端最主要的還是FA(PageAbility),一個應用通常情況下可以沒有PA但一定有FA。所以PageAbilty是很重要的,什麼是PageAbility呢?官方的解釋是:PageAbility是具備ArkUI實現的Ability,是用戶具體可見並可以交互的Ability實例。
下面我們再來說一下HarmonyOS中PageAbility的各種形態:
1. 全屏
2. 半模態
3. 半模態的全屏模式
這種模式跟全屏的效果幾乎一樣,但是默認轉場動畫不同,這種模式的Ability進場動畫是從底部彈出然後頂滿全屏。
4. 彈窗模態(卡片樣式)
以上所說的四種模式是通過給intent設置window_modal
進行設置的。而設置window_modal
時是需要傳入int值的,下面是window_modal
的取值範圍及意義:
0 -> 全屏 (默認)
1 -> 半模態
2 -> 半模態的全屏模式
3 -> 彈窗模態(卡片樣式)
給intent設置window_modal
有兩種:
A. 重寫PageAbility
的onStart
方法並通過intent.setParams("window_modal", 1)
進行設置:
@Override
public void onStart(Intent intent) {
intent.setParams("window_modal", 1); //設置爲半模態樣式的頁面。
setPageParams(null, intent.getParams());
}
B. 在js或eTS中通過featureAbility.startAbility()
的方式
import featureAbility from '@ohos.ability.featureAbility'
import app from '@system.app';
startAbility(abilityName, data = {}){
featureAbility.startAbility({
want: {
bundleName: app.getInfo().appID,
abilityName,
parameters: {
param: data, //給下個頁面傳值
window_modal: 3 //設置爲彈窗模態(卡片樣式)
}
}
})
}