购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Page Ability的基本用法

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

2.2.1 手动创建Page Ability类

Page Ability类是一个普通的Java类,所以我们首先应该创建一个Java类,本例创建的Java类是FirstAbility类。任何一个Page Ability类都必须从Ability类继承,该类属于ohos.aafwk.ability包,所以FirstAbility类的代码如下:

package com.unitymarvel.demo;
import ohos.aafwk.ability.Ability;
public class FirstAbility extends Ability {
}

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

在HarmonyOS App中,任何一个可用的Page Ability在使用前都必须在config.json文件中注册。Page Ability需要在config.json文件中的abilities部分注册。abilities是一个对象数组,其中的每一个元素是一个对象,表示一个Ability(包括Page Ability、Data Ability和Service Ability)。FirstAbility的注册代码如下:

{
   "skills": [
      {
        "actions": [
           "com.unitymarvel.demo.first"
        ]
      }
   ],
   "orientation": "landscape",
   "formEnabled": false,
   "name": "com.unitymarvel.demo.FirstAbility",
   "icon": "$media:icon",
   "description": "$string:sqlite_description",
   "label": "第一个Ability",
   "type": "page",
   "launchType": "standard"
}

在创建HarmonyOS工程时,IDE已经自动在config.json文件中添加了MainAbility的注册信息,读者可以照葫芦画瓢,将MainAbility的注册代码复制一份,然后根据自己的需求略作修改。

FirstAbility的注册代码中主要修改了actions、name和label属性。actions用于指定一个或多个与Page Ability关联的动作,可以通过这些action来调用当前的Page Ability。name用于指定Page Ability类的全名,在本例中为com.unitymarvel.demo.FirstAbility。label用于指定Page Ability的标题文本。

2.2.3 创建布局文件

HarmonyOS App既可以使用Java代码动态创建组件的方式进行布局,也可以使用布局文件进行布局。本例使用布局文件进行布局,这也是我推荐的布局方式。因为使用Java代码创建复杂的布局非常困难,而且代码量比较大,代码难以维护。

HarmonyOS工程的所有布局文件都放在resources/base/layout目录下,现在创建一个first_ layout.xml文件,并输入下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
                ohos:width="match_parent"
                ohos:height="match_parent"
                ohos:orientation="vertical"
                ohos:padding="32"
                ohos:alignment="horizontal_center">
 <Button
      ohos:id="$+id:button1"
      ohos:width="300vp"
      ohos:height="50vp"
      ohos:text="按钮1"
      ohos:bottom_margin="10vp"
      ohos:background_element="#00FFFF"/>
 <Text
      ohos:id="$+id:text"
      ohos:width="300vp"
      ohos:height="50vp"
      ohos:bottom_margin="10vp"
      ohos:text="第一个Ability"
      ohos:background_element="#FF0000"/>
 <Button
      ohos:id="$+id:button2"
      ohos:width="300vp"
      ohos:height="50vp"
      ohos:text="按钮2"
      ohos:background_element="#00FFFF"/>
</DirectionalLayout>

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

2.2.4 装载布局文件

创建完布局文件后,需要与Page Ability关联才能显示布局中的组件。通常需要在Page Ability启动时装载布局文件,这就要使用Page Ability的生命周期方法onStart。该方法会在Page Ability开始时调用,通常用于做一些初始化的工作,例如,为组件指定事件监听器。

现在需要在FirstAbility类中添加一个onStart方法,并使用super.setUIContent方法装载布局文件,代码如下:

package com.unitymarvel.demo;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
public class FirstAbility extends Ability {
   @Override
   public void onStart(Intent intent) {
       // 必须调用父类的onStart方法
       super.onStart(intent);
       super.setUIContent(com.unitymarvel.demo.ResourceTable.Layout_first_layout);
   }
}

在HarmonyOS App中,任何形式的资源都会与一个int类型的值绑定,以便通过该值引用资源,这些值都在ResourceTable类中以常量(其实是static final形式的变量)形式定义。这些值都是自动生成的,通常以资源文件名作为变量名,前面加上前缀。布局文件生成的ID需加上的前缀是Layout,如本例的布局文件是first_layout.xml,所以生成的ID是Layout_first_layout。根据这个生成规则,还要求资源文件的命名必须符合Java标识符的命名规则,否则无法在ResourceTable类中生成ID。

2.2.5 显示Page Ability

到现在为止,一个最小的、完整的Page Ability已经完成了,最后一步就是显示这个Page Ability。如果想让FirstAbility作为主Ability显示(HarmonyOS App运行后显示的第1个Page Ability),可以修改FirstAbility配置信息中的skills部分,将其改成如下形式:

"skills": [
  {
   "entities": [
     "entity.system.home"
   ],
   "actions": [
     "action.system.home"
   ]
  }
]

注意,可能在config.json文件中还有其他Page Ability的actions也设为action.system.home。而HarmonyOS只会显示在config.json文件中遇到的第1个主Ability。所以要将FirstAbility的注册信息调整为abilities的第1个元素,或者注释掉其他的action.system.home。

如果想在其他的Page Ability中显示FirstAbility,需要使用下面的代码:

Intent intent = new Intent();
intent.setAction("com.unitymarvel.demo.first");
startAbility(intent);

不管使用哪种方式,FirstAbility的显示效果都会如图2—3所示。

图2—3 FirstAbility的显示效果

2.2.6 销毁Page Ability

在Page Ability用完后,我们需要关闭Page Ability,或称为销毁Page Ability,只需要调用下面的代码即可销毁Page Ability:

terminateAbility();

该方法属于Ability类,如果在AbilitySlice(在后面介绍)中调用该方法,需要先获得包含AbilitySlice的Ability对象。 Z1Hjb+qxKZI5+hkk5myyoD0jVblDcnUCAkPItDvahRbMTvuqTvAZPvSwQqX94amY

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开