【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记

#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记

 1. Page Ability概述html


Page Ability是FA惟一支持的Ability,本质上是一个窗口,相似于Android的Activity,用于提供与用户交互的能力。为了方便,在后面的内容就将Page Ability简称为Page。另外,HarmonyOS还提供了一个AbilitySlice。AbilitySlice的功能与Page相似,只是在切换时能够在同一个Page内完成。若是从Page到Page,至关于Web页面用新窗口导航到另外一个页面。若是从AbilitySlice切换到AbilitySlice,至关于Web页面以同一个窗口的方式导航到另外一个页面。java


一个Page能够不使用AbilitySlice,也可使用一个或多个AbilitySlice,在建立HarmonyOS工程时,生成的Demo代码中包含了一个默认的AbilitySlice(MainAbilitySlice.java)。图1 是Page和AbilitySlice的关系。
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记图1 Page与AbilitySlice的关系json


若是在Page中使用多个AbilitySlice,那么这些AbilitySlice提供的业务能力应高度相关。下面是一个典型的应用场景:数组


在线视频播放器的主界面能够用一个Page来实现,在主界面中包含了两个AbilitySlice:一个AbilitySlice用于展现视频列表,另外一个AbilitySlice用于播放视频。ide


在DevEco Studio中建立HarmonyOS工程时,IDE会提供一些Page模板,如图2所示。经过这些Page模板,能够生成HarmonyOS工程的骨架代码,其中会包含一些简单的例子,至关于HelloWorld。布局

image.png#图2 建立HarmonyOS工程时的提供的Page模板post


DevEco Studio提供了自动建立Page Ability的功能,在建立的过程当中会自动向config.json文件中添加相应的配置信息。不过为了更深刻理解Page Ability的建立和使用过程,本节将用纯手工的方式建立一个Page Ability。学习


2. 手动建立Page Ability类spa


Page Ability是一个普通的Java类,因此咱们首先应该建立一个Java类,本例建立的Java类是FirstAbility。任何一个Page Ability类都必须从Ability类继承,该类属于ohos.aafwk.ability包,因此FirstAbility的最终形式以下:
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记orm

3. 在config.json文件中注册Page Ability


在HarmonyOS App中,任何一个可用的Page Ability,都必须在config.json文件中注册。Page Ability须要在config.json文件中的abilities部分注册。abilities是一个对象数组,每个元素是一个对象,表示一个Ability(包括Page Ability、Data Ability和Service Ability)。FirstAbility的配置代码以下:
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记
在建立HarmonyOS工程时,IDE已经自动在config.json文件中添加了MainAbility的注册信息,读者能够照葫芦画瓢,将MainAbility的注册代码复制一份,而后略做修改。


这里主要修改了actions、name和label属性。actions表示一个或多个与Page Ability关联的动做,能够经过这些action来调用当前的Page Ability。name指定了Page Ability类的全名,本例是com.unitymarvel.demo.FirstAbility。label用于指定窗口的标题文本。


4. 建立布局文件


HarmonyOS App既能够用Java代码动态建立组件的方式布局,也可使用布局文件。本例使用布局文件的方式进行布局,这也是我推荐的布局方式。由于使用Java代码建立复杂的布局很是困难,并且代码量比较大,代码难以维护。
HarmonyOS工程的全部布局文件都放在resources/base/layout目录中,如今建立一个first_layout.xml文件,并输入下面的代码:
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记

关于布局的更多内容在后面的章节会详细讨论,这里只要知道,first_layout.xml文件中使用了方向布局,并且是垂直方向。在垂直方向上从上到下放置了3个组件,分别是Button一、Text和Button2。


5. 装载布局文件


建立完布局文件后,须要与Page Ability关联才能显示布局中的组件。一般须要在Page Ability启动时装载布局文件,这就要使用到Page Ability的生命周期方法onStart,该方法会在Page Ability开始时调用,一般在onStart方法中作一些初始化的工做,例如,为组件指定事件监听器。
如今须要在FirstAbility类中添加一个onStart方法,并使用super.setUIContent方法装载布局文件,代码以下:
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记在HarmonyOS App中,任何形式的资源都会与一个int类型的值绑定,以便经过该值引用资源,这些值都在ResourceTable类中以常量(static final形式的变量)形式存在。这些值都是自动生成的,一般以资源文件名做为变量名,前面加上前缀。布局文件的前缀是Layout。如本例的布局文件是first_layout.xml,因此生成的ID是Layout_first_layout。根据这个生成规则,要求资源文件的命名必须符合Java标识符的命名规则,不然没法在ResourceTable类中生成ID。


6. 显示Page Ability


到如今为止,一个最小的,并且是完整的Page Ability已经完成了,最后一步就是显示这个Page Ability。若是想让FirstAbility做为主Ability显示(HarmonyOS App运行后显示的第1个Page Ability),能够修改FirstAbility配置信息中的skills部分,将其改为以下形式:
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记但要主要,可能在config.json文件中还有其余Page Ability的actions也设为action.system.home。而HarmonyOS只会显示在config.json文件中遇到的第一个主Ability。因此要么将FirstAbility的注册信息调整为abilities的第1个元素,要么注释掉其余的action.system.home。
若是想在其余的Page Ability中显示FirstAbility,须要使用下面的代码。

#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记无论使用哪一种方式,FirstAbility的效果都会如图3所示。
#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记图3 FirstAbility的显示效果


7. 销毁Page Ability


在Page Ability用完后,就须要关闭Page Ability,或称为销毁Page Ability,只须要调用下面的代码便可销毁Page Ability。

#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记该方法属于Ability,若是在AbilitySlice(在后面介绍)中调用该方法,须要先得到包含AbilitySlice的Ability对象。

欢迎访问李宁老师的【鸿蒙基地】专栏:https://harmonyos.51cto.com/column/17#bkwz

李宁老师的课程主页:https://edu.51cto.com/lecturer/974126.html#bkwz

文章后续内容和相关附件能够点击下面的原文连接前往学习

原文连接:https://harmonyos.51cto.com/posts/2428#bkwz


想了解更多关于鸿蒙的内容,请访问:

51CTO和华为官方战略合做共建的鸿蒙技术社区

https://harmonyos.51cto.com/#bkwz


#2020征文-TV#【鸿蒙基地】鸿蒙从窗口开始:Page Ability诞生记