Stage模型应用程序包结构

本文介绍了HarmonyOS应用的Module结构,区分了Ability和Library模块类型,详细阐述了Entry和FeatureHAP的区别,以及Stage模型中UIAbility和ExtensionAbility的作用。还提供了鸿蒙4.0入门教程的相关资源链接。
摘要由CSDN通过智能技术生成

项目结构概述:

 

Module模块

Module是应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用/服务通常会包含一个或多个Module

每个Module分为Ability和Library两种类型

Module分为“Ability”和“Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library”类型的Module对应于HAR(Harmony Archive),或者HSP(Harmony Shared Package)。

一个Module可以包含一个或多个UIAbility组件

  • 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件,即HAP。HAP是HarmonyOS应用安装的基本单位,包含了编译后的代码、资源、三方库及配置文件。HAP可分为Entry和Feature两种类型。
    • Entry类型的HAP:是应用的主模块,在module.json5配置文件中的type标签配置为“entry”类型。在同一个应用中,同一设备类型只支持一个Entry类型的HAP,通常用于实现应用的入口界面、入口图标、主特性功能等。
    • Feature类型的HAP:是应用的动态特性模块,在module.json5配置文件中的type标签配置为“feature”类型。一个应用程序包可以包含一个或多个Feature类型的HAP,也可以不包含;Feature类型的HAP通常用于实现应用的特性功能,可以配置成按需下载安装,也可以配置成随Entry类型的HAP一起下载安装(请参见module对象内部结构中的“deliveryWithInstall”)。

Entry类型HAP创建方式

  • 文件-》新建项目

  • 选择Ability相关模版进行创建

  • 填写相关内容即可

Feature类型创建HAP

  • 项目->右键->模块

  • 同样选择Ability相关模版进行

  • 选择创建Feature类型的模块

  • 创建Feature中的Ability名称

  • 会新建成功出现一个application,Feature类型的HAP包

Stage模型概念图

  • AbilityStage每个Entry类型或者Feature类型的HAP在运行期都有一个AbilityStage类实例,当HAP中的代码首次被加载到进程中的时候,系统会先创建AbilityStage实例。每个在该HAP中定义的UIAbility类,在实例化后都会与该实例产生关联。开发者可以使用AbilityStage获取该HAP中UIAbility实例的运行时信息。
  • Stage模型提供UIAbility和ExtensionAbility两种类型的组件,这两种组件都有具体的类承载,支持面向对象的开发方式。
    • UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。例如,图库类应用可以在UIAbility组件中展示图片瀑布流,在用户选择某个图片后,在新的页面中展示图片的详细内容。同时用户可以通过返回键返回到瀑布流页面。UIAbility的生命周期只包含创建/销毁/前台/后台等状态,与显示相关的状态通过WindowStage的事件暴露给开发者。
    • ExtensionAbility组件是一种面向特定场景的应用组件。开发者并不直接从ExtensionAbility派生,而是需要使用ExtensionAbility的派生类。目前ExtensionAbility有用于卡片场景的FormExtensionAbility,用于闲时任务场景的WorkSchedulerExtensionAbility等多种派生类,这些派生类都是基于特定场景提供的。例如,用户在桌面创建应用的卡片,需要应用开发者从FormExtensionAbility派生,实现其中的回调函数,并在配置文件中配置该能力。ExtensionAbility派生类实例由用户触发创建,并由系统管理生命周期。在Stage模型上,普通应用开发者不能开发自定义服务,而需要根据自身的业务场景通过ExtensionAbility的派生类来实现。
  • WindowStage每个UIAbility类实例都会与一个WindowStage类实例绑定,该类起到了应用进程内窗口管理器的作用。它包含一个主窗口。也就是说UIAbility通过WindowStage持有了一个窗口,该窗口为ArkUI提供了绘制区域。

2024鸿蒙4.0+next入门到实战教程,课程一对一答疑,答疑社群,源码
资料领取-》

https://item.taobao.com/item.htm?ft=t&id=761209890044 

  • 40
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 JavaFX 的应用程序中拖动 Stage 可以使用下列步骤进行操作: 1. 在 Scene 对象上添加鼠标事件监听器,例如鼠标按下和鼠标拖动事件。 2. 在鼠标按下事件的处理方法中,记录鼠标按下时的屏幕坐标和 Stage 当前的坐标,用于在鼠标拖动事件中计算新的 Stage 坐标。 3. 在鼠标拖动事件的处理方法中,计算新的 Stage 坐标,并使用 Stage 的 setX() 和 setY() 方法更新 Stage 的坐标。 例如,可以使用以下代码实现拖动 Stage 的功能: ``` // 为 Scene 添加鼠标事件监听器 scene.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { // 记录鼠标按下时的屏幕坐标和 Stage 当前的坐标 xOffset = event.getScreenX() - stage.getX(); yOffset = event.getScreenY() - stage.getY(); } }); scene.setOnMouseDragged(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { // 更新 Stage 的坐标 stage.setX(event.getScreenX() - xOffset); stage.setY(event.getScreenY() - yOffset); } }); ``` 在上面的代码中,xOffset 和 yOffset 分别记录鼠标按下时屏幕坐标与 Stage 当前坐标之差,在鼠标拖动事件中,使用当前鼠标的屏幕坐标减去 xOffset 和 yOffset 计算新的 Stage 坐标,并使 ### 回答2: 在JavaFX的应用程序中,可以通过以下几个步骤实现拖动Stage: 1. 首先,需要为Stage添加一个鼠标按下事件的监听器。可以使用如下代码实现: ``` stage.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> { xOffset = event.getSceneX(); yOffset = event.getSceneY(); }); ``` 在上述代码中,xOffset和yOffset是用来保存鼠标按下时的坐标位置的变量。 2. 接下来,需要为Stage添加一个鼠标拖拽事件的监听器。可以使用如下代码实现: ``` stage.addEventHandler(MouseEvent.MOUSE_DRAGGED, event -> { stage.setX(event.getScreenX() - xOffset); stage.setY(event.getScreenY() - yOffset); }); ``` 在上述代码中,setX()和setY()方法用于设置Stage的位置,event.getScreenX()和event.getScreenY()用于获取鼠标当前的屏幕坐标。 3. 最后,为了能够实现整个拖拽过程,还需要监听鼠标释放事件。可以使用如下代码实现: ``` stage.addEventHandler(MouseEvent.MOUSE_RELEASED, event -> { xOffset = 0; yOffset = 0; }); ``` 在上述代码中,将xOffset和yOffset重置为0,以便下次拖拽时重新计算新的偏移量。 通过完成以上三个步骤,即可在JavaFX应用程序中实现拖动Stage的功能。当鼠标按下、拖拽和释放时,Stage会随着鼠标的移动而跟随移动。 ### 回答3: 在JavaFX的应用程序中,要实现拖动Stage可以按照以下步骤进行: 1. 获取Stage对象:通过场景(Scene)获取Stage对象,可以使用`getStage()`方法。 2. 设置鼠标按下事件:使用`setOnMousePressed()`方法设置鼠标按下事件监听器。在事件处理程序中,记录鼠标按下时的坐标。 3. 设置鼠标拖动事件:使用`setOnMouseDragged()`方法设置鼠标拖动事件监听器。在事件处理程序中,计算鼠标的偏移量,并将Stage的位置更新为鼠标当前位置与偏移量之和。 4. 设置鼠标松开事件:使用`setOnMouseReleased()`方法设置鼠标松开事件监听器,不进行特殊处理。 下面是一个简单的实现示例: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; public class DraggableStage extends Application { private double xOffset; private double yOffset; @Override public void start(Stage stage) throws Exception { // 创建场景 Scene scene = new Scene(new StackPane(), 400, 300); // 设置鼠标按下事件 scene.setOnMousePressed(event -> { xOffset = event.getSceneX(); yOffset = event.getSceneY(); }); // 设置鼠标拖动事件 scene.setOnMouseDragged(event -> { stage.setX(event.getScreenX() - xOffset); stage.setY(event.getScreenY() - yOffset); }); // 设置舞台和场景 stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } } ``` 上述示例中,当鼠标按下时记录了鼠标按下的坐标(相对于场景),然后在鼠标拖动事件中计算鼠标的偏移量,并将舞台的位置更新为当前鼠标位置与偏移量之和。这样就实现了拖动Stage的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员佩奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值