HarmonyOS(鸿蒙)应用/服务开发window_modal

2022-11-21  本文已影响0人  蜗牛学开车

熟悉HarmonyOS(鸿蒙)的小伙伴都知道,鸿蒙应用是基于Ability的,一个鸿蒙应用可以包含多个Ability。

Ability框架模型具有两种形态:

  1. 第一种形态为FA模型。API 8及其更早版本的应用程序只能使用FA模型进行开发。FA模型将Ability分为FA(Feature Ability)和PA(Particle Ability)两种类型,其中FA支持Page Ability,PA支持Service Ability、Data Ability、以及FormAbility。
  2. 第二种形态为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. 重写PageAbilityonStart方法并通过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 //设置为弹窗模态(卡片样式)
            }
        }
    })
}
上一篇下一篇

猜你喜欢

热点阅读