熟悉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 //设置为弹窗模态(卡片样式)
}
}
})
}