更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz1。PageAbility概述PageAbility是FA唯一支持的Ability。它本质上是一个窗口,类似于AndroidActivity,用于提供与用户交互的能力。为方便起见,以下内容将PageAbility简称为Page。此外,HarmonyOS还提供了一个AbilitySlice。AbilitySlice的功能与Page类似,只是切换时可以在同一个Page中完成。如果从Page转到Page,就相当于在网页上导航到另一个有新窗口的页面。如果从AbilitySlice切换到AbilitySlice,就相当于在同一窗口中从一个网页导航到另一个页面。页面可以不使用AbilitySlice,也可以使用一个或多个AbilitySlice。在创建HarmonyOS工程时,生成的Demo代码中包含一个默认的AbilitySlice(MainAbilitySlice.java)。图1是Page和AbilitySlice的关系。图1Page和AbilitySlice的关系如果Page中使用了多个AbilitySlice,那么这些AbilitySlice提供的业务能力应该是高度相关的。下面是一个典型的应用场景:一个在线视频播放器的主界面可以用一个Page实现,Page包含两个AbilitySlice:一个AbilitySlice用于显示视频列表,另一个AbilitySlice用于播放视频。在DevEcoStudio中创建HarmonyOS项目时,IDE提供了一些页面模板,如图2所示。通过这些Page模板,可以生成HarmonyOS项目的骨架代码,其中会包含一些简单的例子,相当于HelloWorld。图2创建HarmonyOS项目时提供的Page模板DevEcoStudio提供了自动创建PageAbility的功能,创建过程中会自动在config.json文件中添加相应的配置信息。但是为了更好的理解创建和使用PageAbility的过程,本节将手动创建一个PageAbility。2、手动创建PageAbility类PageAbility是一个普通的Java类,所以我们首先要创建一个Java类。本例中创建的Java类是FirstAbility。任何PageAbility类都必须继承自属于ohos.aafwk.ability包的Ability类,所以FirstAbility的最终形式如下:3.在config.json文件中注册PageAbility。在HarmonyOSApp中,任何可用的PageAbility都必须在config.json文件中注册。PageAbility需要在config.json文件的abilities部分注册。abilities是一个对象数组,每个元素都是一个对象,代表一个能力(包括页面能力、数据能力和服务能力)。FirstAbility的配置代码如下:在创建HarmonyOS项目时,IDE已经自动将MainAbility的注册信息添加到config.json文件中。读者可以照着葫芦复制MainAbility的注册码,然后稍作修改。这里主要修改actions、name、label属性。Actions表示与PageAbility关联的一个或多个动作,通过它可以调用当前的PageAbility。名称指定页面能力类的全名,在本例中为com.unitymarvel.demo.FirstAbility。label用于指定窗口的标题文本。4.创建布局文件HarmonyOSApp可以通过Java代码动态创建组件,或者使用布局文件进行布局。本例使用布局文件进行布局,也是我推荐的布局方式。因为用Java代码创建复杂的布局非常困难,而且代码量比较大,代码维护难度大。HarmonyOS项目的所有layout文件都放在resources/base/layout目录下,现在创建一个first_layout.xml文件,输入如下代码:关于layout的更多内容会在后面的章节中详细讨论,只要到这里就知道了,first_layout.xml文件中使用的是定向布局,而且是垂直的。三个组件在垂直方向上从上到下放置,分别是Button1、Text和Button2。5.加载布局文件创建布局文件后,需要关联PageAbility才能显示布局中的组件。通常需要在PageAbility启动时加载布局文件,这就需要使用PageAbility生命周期方法onStart,在PageAbility启动时会调用该方法,通常会在onStart方法中做一些初始化工作,对于例如,为组件事件监听器指定。现在需要在FirstAbility类中添加onStart方法,并使用super.setUIContent方法加载布局文件。代码如下:在HarmonyOSApp中,任何形式的资源都会绑定一个int类型的值,这样就可以通过这个值来引用资源。这些值以常量(staticfinal形式的变量)的形式存在于ResourceTable类中。这些值是自动生成的,通常以资源文件名作为变量名,在前面加上前缀。布局文件以Layout为前缀。例如本例中的布局文件为first_layout.xml,则生成的ID为Layout_first_layout。根据这个生成规则,资源文件的命名必须遵守Java标识符的命名规则,否则无法在ResourceTable类中生成ID。6.展示页面能力至此,一个最小完整的页面能力已经完成,最后一步就是展示这个页面能力。如果想让FirstAbility显示为主Ability(HarmonyOSApp运行后显示的第一个页面Ability),可以修改FirstAbility配置信息中的skills部分,改成如下形式:Buttobemainone,可能在config.json文件中还有其他PageAbility动作也设置为action.system.home。而HarmonyOS只会显示config.json文件中遇到的第一个主技能。所以要么将FirstAbility的注册信息调整为abilities的第一个元素,要么注释掉其他的action.system.home。如果想在其他PageAbilities中显示FirstAbility,需要使用如下代码。无论使用哪种方式,FirstAbility的效果都会如图3所示。图3FirstAbility的显示效果7.销毁PageAbilityPageAbility用完后,需要关闭PageAbility,或者销毁Page能力。只需调用以下代码即可销毁PageAbility。这种方法属于能力。如果在AbilitySlice(后述)中调用该方法,需要先获取包含AbilitySlice的Ability对象。欢迎来到李宁老师的【鸿蒙基地】专栏:https://harmonyos.51cto.com/column/17李宁老师的课程主页:https://edu.51cto.com/lecturer/974126.html?Copyrightbelongs为作者和鸿蒙科技社区共同所有。如需转载请注明出处,否则追究责任。ZZ
