赞
踩
注意: 这个模拟器不是本地模拟器,而是在华为服务器中的,好处是这样的模拟器不需要占用本地的资源了,但在启动之后不能超1个小时,如果超过之后需要重启模拟器。(全程必须联网)
最外面是:Ability
Ability中是一个或多个子页面:AbilitySlice
子页面中有要展示的内容:图片,文本等信息
问: 为什么会有子页面的存在呢?直接在最外面的页面里面添加文本信息不更简单么?
结论:一个单独的功能,对应着一个Ability。如果这个能力中需要进行切换,那么就可以在Ability中,写多个子页面AbilitySlice进行切换。
补充:和鸿蒙的“可分可合”设计思想有关,图片为一个鸿蒙的完整的APP的安装包结构。它会先把每个Ability文件打包为一个 .Hap文件(也就是说一个Ability对应一个Hap包),然后再把所有的Hap包打包成一个整体的APP。这样做的特点有:“可分可合”的设计思想,当用户用到什么就下载什么,每一个Hap包都可单独下载安装。
鸿蒙UI中提供了两种编写布局的方式:
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>
删除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);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。