第一个入门应用:HelloWorld
1. 如何运行项目
登录账号
开启模拟器
注意: 这个模拟器不是本地模拟器,而是在华为服务器中的,好处是这样的模拟器不需要占用本地的资源了,但在启动之后不能超1个小时,如果超过之后需要重启模拟器。(全程必须联网)
运行程序
2. 页面中的包含关系
什么是页面(页面的组成)
包含关系:
最外面是:Ability
Ability中是一个或多个子页面:AbilitySlice
子页面中有要展示的内容:图片,文本等信息
问: 为什么会有子页面的存在呢?直接在最外面的页面里面添加文本信息不更简单么?
结论:一个单独的功能,对应着一个Ability。如果这个能力中需要进行切换,那么就可以在Ability中,写多个子页面AbilitySlice进行切换。
补充:和鸿蒙的“可分可合”设计思想有关,图片为一个鸿蒙的完整的APP的安装包结构。它会先把每个Ability文件打包为一个 .Hap文件(也就是说一个Ability对应一个Hap包),然后再把所有的Hap包打包成一个整体的APP。这样做的特点有:“可分可合”的设计思想,当用户用到什么就下载什么,每一个Hap包都可单独下载安装。
3. 学习项目的配置文件:config.json
配置文件的三个部分
config.json 文件详细说明
4. 了解程序的运行过程
第二个入门应用:页面跳转
实现步骤
- 编写第一个页面(文本 + 按钮)
- 编写第二个页面(文本)
- 给按钮添加一个跳转
两种编写布局的方式
鸿蒙UI中提供了两种编写布局的方式:
XML版
ability_main代码如下:
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">
<Text
ohos:id="$+id:text_helloworld"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="$graphic:background_ability_main"
ohos:layout_alignment="horizontal_center"
ohos:text="第一个页面"
ohos:text_size="40vp"
/>
<Button
ohos:id="$+id:but1"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="red"
ohos:text_size="40fp"
ohos:text="点我"
/>
</DirectionalLayout>
JAVA版
删除layout中ability_second__main2.xml文件,并在Second_MainAbility2Slice.java中加注释。图示如下:
Second_MainAbility2Slice.java 中的代码如下:
package com.example.myapplication.slice;
import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.Text;
import ohos.agp.utils.Color;
public class SecondMainAbilitySlice extends AbilitySlice {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
//super.setUIContent(ResourceTable.Layout_ability_second_main);
//1. 创建布局对象
DirectionalLayout dl = new DirectionalLayout(this);
//2. 创建文本对象
Text t = new Text(this);
//设置内容
t.setText("第二个页面");
//设置文字大小
t.setTextSize(55);
//设置文字颜色
t.setTextColor(Color.BLUE);
//3. 把文本对象添加到布局当中
dl.addComponent(t);
//4. 把布局添加到子界面当中
super.setUIContent(dl);
}
@Override
public void onActive() { super.onActive(); }
@Override
public void onForeground(Intent intent) { super.onForeground(intent); }
}
MainAbilitySlice.java 中的代码如下:
package com.example.myapplication.slice;
import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
Button btu;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1. 找到按钮
btu = (Button) findComponentById(ResourceTable.Id_but1);
//2. 给按钮添加一个点击事件
//如果没有添加点击事件,那么用鼠标点击按钮之后是没有任何反应的
//如果添加了点击事件,那么用鼠标点击按钮之后,就可以执行对应的代码
btu.setClickedListener(this);
//理解方式:
//给btu这个按钮添加了点击事件
//当点击了btu这个按钮之后,就可以执行按钮中onClick的方法
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
public void onClick(Component component) {
//点击按钮之后执行要执行的代码
//跳转到第二个页面中
if (component == btu)
{
//只有点击了btu这个按钮之后,才进行跳转
//跳转到那个页面中(意图)
Intent i =new Intent();
//包含了要跳转的页面信息
Operation operation = new Intent.OperationBuilder()
.withDeviceId("") //要跳转到到哪个设备上,如果传递一个没有内容的字符串,表示跳转本机
.withBundleName("com.example.myapplication") //跳转到哪个应用上,小括号里可以写包名
.withAbilityName("com.example.myapplication.SecondMainAbility")//要跳转的页面
.build();//表示将上面的三个信息进行打包
//把打包之后的operation对象去设置到意图当中
i.setOperation(operation);
//跳转页面
startAbility(i);
}
}
}