IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Harmony学习(一) -> 正文阅读

[开发工具]Harmony学习(一)

Harmony应用开发学习(一)

1、HelloWorld

1.1 开发工具的项目结构

DevEco Studio基于IDEA开发,基本项目结构为:项目 —— 模块 —— 包 —— 类

我们主要关心的是HarmonyProject -> entry

entryjava编写代码,resources保存我们所需要的文件,config.json关于APP的配置文件

1.2 HelloWorld

运行项目

  1. 登录账号
  2. 选择并开启模拟器:Tools -> Device Manager -> 选择设备
  3. 运行项目

页面中的包含关系

  • Ability页面 -> AbilitySlice子页面(切片) -> 展示内容

  • 一个Ability对应一个Hap包,每一个Hap包都可以单独下载安装,需要什么下载什么

  • 在以后的开发中,一个单独的功能对应一个Ability。如果这个功能需要进行切换,就可以在Ability中,写多个子页面AbilitySlice进行切换

config.json配置文件

  • 项目配置app:厂商信息、项目版本号
  • 应用在设备上的配置信息deviceConfig:应用运行时进程名、是否允许使用流量、是否支持未解锁时启动、权限
  • 代码中配置module:所有的Ability
{
  "app": {
    "bundleName": "com.example.first",
    "vendor": "example",
    "version": {
      "code": 1000000,
      "name": "1.0.0"
    }
  },
  "deviceConfig": {},
  "module": {
    "package": "com.example.first",
    "name": ".MyApplication",
    "mainAbility": "com.example.first.MainAbility",
    "deviceType": [
      "phone"
    ],
    "distro": {
      "deliveryWithInstall": true,
      "moduleName": "entry",
      "moduleType": "entry",
      "installationFree": false
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "unspecified",
        "name": "com.example.first.MainAbility",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "$string:entry_MainAbility",
        "type": "page",
        "launchType": "standard"
      },
      {
        "orientation": "unspecified",
        "name": "com.example.first.SecondAbility",
        "icon": "$media:icon",
        "description": "$string:secondability_description",
        "label": "$string:entry_SecondAbility",
        "type": "page",
        "launchType": "standard"
      }
    ]
  }
}

2、页面跳转案例

在鸿蒙UI中,提供了两种编写布局的方式:

  • XML文件:标签表示要展示的不同内容,<Text>文本、<Image>图片、<Button>按钮
  • Java代码:对象表示要展示的不同内容,文本(Text对象)、图片(Image对象)、按钮(Button对象)

步骤

  1. 创建第二个页面Ability页面
  2. 构建页面
  3. 编写实现代码

2.1 构建页面

第一个页面使用修改XML文件的形式构建页面:

<?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"
        />

    <!-- match_content表示包裹文字,根据内容设置大小 -->
    <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代码形式构建页面:

// SecondAbilitySlice.java
package com.example.first.slice;

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 SecondAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // super.setUIContent(ResourceTable.Layout_ability_second);
        // 1. 创建一个布局对象
        DirectionalLayout dl = new DirectionalLayout(this);

        // 2. 创建文本对象
        Text text = new Text(this);
        // 设置文本内容
        text.setText("第二个页面");
        // 设置内容文字大小
        text.setTextSize(55);
        // 设置文字颜色
        text.setTextColor(Color.BLUE);

        // 3. 将文本对象添加到布局中
        dl.addComponent(text);

        // 4. 将布局添加到子界面中
        super.setUIContent(dl);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

2.2 实现代码

// MainAbilitySlic.java
package com.example.first.slice;

import com.example.first.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 btn;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        // 1. 找到按钮(根据id)
        btn = (Button) findComponentById(ResourceTable.Id_but1);

        // 2. 给按钮添加一个点击事件
        btn.setClickedListener(this);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    @Override
    public void onClick(Component component) {
        // 点击事件
        // 跳转到第二个页面
        if (component == btn) {
            // 意图
            Intent i = new Intent();
            // 包含了要跳转的页面信息
            Operation operation = new Intent.OperationBuilder()
                    .withDeviceId("") //要跳转到哪个设备上,如果传递一个没有内容字符串,表示跳转本机
                    .withBundleName("com.example.first") //要跳转到哪个应用上,参数可以写包名
                    .withAbilityName("com.example.first.SecondAbility") //要跳转的页面
                    .build(); // 将上面的三个信息进行打包
            // 将打包后的operation对象设置到意图当中
            i.setOperation(operation);
            // 跳转页面
            startAbility(i);
        }
    }
}

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:52:50  更:2021-07-25 11:53:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/17 2:51:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码