首页 > 其他分享 >[Kyana]开发OpenHarmony应用

[Kyana]开发OpenHarmony应用

时间:2024-02-15 13:11:18浏览次数:27  
标签:OpenHarmony ElementType TestAnnotation class 应用 组件 注解 Kyana public

Java ver.

HelloWorld

config.json

app{
    bundleName:包名
	vendor:开发厂商名(小贩)
	version:code(内部版本号),name(用户版本号)
}
deviceConfig{
    应用在设备上的配置
}
module{
    package:包名
    name:当前hap包名字
    mainAbility:hap包的入口ability
    deviceType:当前应用可以运行的设备类型
    distro:{
    	deliveryWithInstall:是否支持随应用安装
    	moduleName:当前hap包名称
    	moduleType:当前hap包类型(entry:主要模块,可以单独安装运行)
	}
	ability{
        每个ability的配置,
    }
}

页面跳转

对于Java代码,页面分Java页面和xml页面。

Java页面

  1. 新建布局对象,添加文本对象,设置文本形状
  2. 将文本对象添加进布局,在UI中加入布局

xml页面

  1. 添加按钮/页面标签,在标签中加入相应元素
  2. 在abilitySlice中通过资源表调用

链接页面

  1. 创建按钮对象,调用鸿蒙API,添加点击事件
  2. 重写点击方法,添加跳转的包名、ability名

组件布局事件

屏幕展示出的元素都是组件;多个组件的摆放方式就是布局,组件必须添加到布局中才能显现出来;事件就是可以被组件识别的操作。

事件

常见的事件:单击,双击,长按,滑动

component是所有组件的父类,调用子类方法需要强制类型转换

给按钮设置单击事件,自己写一个类实现点击监听器接口,并重写点击方法,最后编写点击方法体

单击事件的四种写法

  1. 定义实现类:点击后不需要操作其它组件对象
  2. 当前类作为实现类:点击后需要操作其它组件对象
  3. 匿名内部类:不需要定义新类,不需要实施接口,但只能使用一次
  4. 方法引用:新方法的返回类型和形参需要与抽象接口的方法保持一致

双击事件的写法

一定要注意重名的!!!

长按事件同上,换方法就行,闪退bug不知道原因

滑动事件的写法

  1. 滑动的三个动作:按下、滑动、松开
  2. 手指的位置:坐标,手机左上角是原点,第一卦限
  3. 部分需要限制坐标范围
  4. onTouchEvent返回值为true,所有动作都会触发当前方法并执行对应代码;返回值false,只有第一个动作和触发当前方法并执行对应代码

组件

组件的父类就是 Component,布局也是一种组件

显示类组件

  • 文本框:填充父元素,单位像素
  • px=vp*ppi/160,ppi=对角线像素个数/屏幕尺寸
分辨率 换算
240*320 1vp=0.75px
320*480 1vp=1px
480*800 1vp=1.5px
720*1280 1vp=2px
1920*1080 1vp=3px
  • 颜色:前面可以加两个数字透明度,代码中常用十进制
位置
  1. 外边距:组件边框到外侧其他组件(父布局)距离
  2. 内边距:边框内测到文本的距离

文本最大行数默认是1,自动换行默认是关

ohos:max_text_lines="1"
ohos:mutiple_lines="false"
<!--省略部分文字用点替代-->
ohos:truncation_mode=""

开启自动滚动需要同时设置滚动次数和滚动时间,并在代码中开启

弹框组件

交互类组件

Java注解

注解的作用

  • 通过 @interface定义

    public @interface TestAnnotation {
    }
    
  • 在类前加入 @注解名使用

    @TestAnnotation
    public class Test {
    }
    

注解的注解(元注解)

  • @Retention:保留期,说明注解的存活时间

    @Retention(RetentionPolicy.RUNTIME) //只在程序运行周期应用
    public @interface TestAnnotation {
    }
    
    // RetentionPolicy.SOURCE 只在源码阶段,编译时被丢弃
    // RetentionPolicy.CLASS 保留到编译时,不会被加载进JVM
    // RetentionPolicy.RUNTIME 保留到程序运行时,被加载到JVM
    
  • @Documented:注解中的元素包含到Javadoc

    @Documented
    public @interface TestAnnotation {
    }
    
  • @Target:指定注解使用到地方

    @Target(ElementType.FIELD) // 给属性注解
    public @interface TestAnnotation {
    }
    
    // ElementType.ANNOTATION_TYPE 给注解进行注解
    // ElementType.CONSTRUCTOR 给构造方法注解
    // ElementType.FIELD 给属性注解
    // ElementType.LOCAL_VARIABLE 局部变量注解
    // ElementType.METHOD 给方法注解
    // ElementType.PACKAGE 给一个包注解
    // ElementType.PARAMETER 给方法内的参数注解
    // ElementType.TYPE 给一个类型(类、接口、枚举等)注解
    
  • @Inherited:如果父类的注解被应用 @Inherited元注解,而子类没有被任何注解应用,子类继承父类的注解

    @Inherited
    @Interface Test {}
    
    @Test
    public class Father {}
    
    public class Son extends Father {} // Son继承了@Test注解
    
  • @Repeatable:注解的值可以同时取多个

    @interface Identity {
        Person[] value(); // 必须有一个value属性,属性类型是被注解的注解数组
    }
    @Repeatable(Identity.class) // 容器注解,用一个注解存放其它注解
    @interface Person {
        String role default "";
    }
    
    @Person(role = "painter")
    @Person(role = "coder")
    public class Man {
    }
    

注解的属性

注解的属性也叫成员变量,注解没有成员方法,成员变量以无形参的方法声明,该方法定义了成员变量的名字,返回值定义了成员变量的类型。

public @interface TestAnnotation {
    int id() default 1;
    String msg() default "";
}

@TestAnnotation(id = 0, msg = "Hellow world!") // 注解没有任何属性时可以省略括号
public class Hello {
}

预制的注解

  • @Deprecated:标记过时的元素
  • @Override:提示子类复写父类中被修饰的方法
  • SupressWarrings:阻止警告
  • SafeVarargs:提醒开发者不要用参数做不安全的操作,会阻止编译器产生 unchecked警告
  • FunctionalInterface:函数式接口,用于

注解的提取(反射)

public boolean isAnnotationPresent(Class<? extends Annotation annotationClass) {}
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {}
public Annotation[] getAnnotations() {}

@TestAnnotation
public class Test {
    @Check(value = "hello")
    int a;
    @Perform
    public void methodTest() {}
}
public static void main(String[] args) {
    // annotation of class
    boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation);
    if (hasAnnotation) {
        TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation);
        System.out.println("id: " + testAnnotation.id());
        System.out.println("msg: " + testAnnotation.mag());
    }
    // annotation of variable
    Check chk = a.getAnnotation(Check.class);
    if (chk != null) {
        System.out.println("check value: " + chk.value());
    }
    // annotation of method
    Annotation[] ans = methodTest.getAnnotations();
    for (int i = 0; i < ans.length; i++) {
        Sytem.out.println("method: " + ans[i].annotaionType.getSympleName());
    }
}

标签:OpenHarmony,ElementType,TestAnnotation,class,应用,组件,注解,Kyana,public
From: https://www.cnblogs.com/kyana/p/18016171

相关文章

  • 轻松实现.NET应用自动更新:AutoUpdater.NET教程
    在软件开发中,应用程序的自动更新功能是一个重要的特性,它能让用户在不手动干预的情况下获取最新的软件版本。这不仅提高了用户体验,还有助于开发者及时修复潜在的问题、增加新功能,并确保软件的安全性和稳定性。对于.NET开发者来说,实现自动更新功能并不总是那么简单。幸运的是,有一个......
  • exec 函数详解及应用
    exec函数详解及应用一、介绍​ 当谈论exec函数时,我们通常指的是exec函数族,这是在Unix/Linux操作系统上用于执行新进程的一组系统调用。exec函数族的成员包括execl、execv、execle、execve、execvp等。这些函数的主要目的是在当前进程的上下文中执行一个新程序,从而替换......
  • 第24天:安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制
    #文件管理模块-上传-过滤机制1、无过滤机制2、黑名单过滤机制3、白名单过滤机制4、文件类型过滤机制 $_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息......
  • leetcode——数组算法——前缀和构建和应用
    leetcode——数组算法——前缀和构建和应用前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和303.区域和检索-数组不可变比如leetcode303.区域和(检索-数组不可变)题目介绍:给定一个整数数组nums,处理以下类型的多个查询:计算索引left和right(包含left......
  • 验证:web应用程序要遵循http协议
     说明webserver响应的格式必须要遵循http响应协议,否则浏览器或者其它客户端工具不能解析响应,而http请求协议已经由浏览器或者其它客户端工具帮我们封装好了。这里我们直接通过socket写一个简单的server来演示。 get请求server.pyimportsocketimporttime#创建TCP......
  • 简单字符(串)输出:转义符应用
     即?*&\!_//\a@\\\r\n!//\\"_"/\\^!~zZ#include<stdio.h>intmain(){chara,b,c,d,e,f,g,h,i,j,o;a='?';b='*';c='&';d='\\';e='!';f=......
  • 基于概念映射的问题提出方法对学生学习成绩和批判性思维倾向的影响:在文言文学习情境
    (Effectsofaconceptmapping-basedproblem-posingapproachon students’learningachievementsandcriticalthinkingtendency: AnapplicationinClassicalChineselearningcontexts) doi:10.1111/bjet.13007一、摘要研究目的:在语言课程中,培养学生的系统思维能......
  • 没有APP应用商店,也能用了,直接解包,使用。
    对于解包.AppxBundle文件,可以按照以下步骤进行操作:首先,确保你的操作系统是Windows10或更高版本,因为.AppxBundle文件主要用于Windows应用程序。找到你想要解包的.AppxBundle文件,并将其复制到一个新的文件夹中。将文件夹中的.AppxBundle文件的扩展名更改为.z......
  • [Kyana]Linux使用小技巧
    01|使用逻辑卷使存储空间可扩展前排提示小白在使用Linux虚拟机时,常在开始分配较小的硬盘空间,在后续使用中常出现硬盘空间不足的问题,轻则无法安装软件,重则无法更新。本文推荐使用逻辑卷方式安装操作系统,便于后续磁盘扩充。在逻辑卷上创建文件系统流程:层次(命令):|物理磁盘|(-fdis......
  • [Kyana]Fedora使用记录
    删除旧内核:dnfremove--oldinstallonly重置密码密钥环不匹配:安装seahorse新建并默认,可以单独设置密码,记好优化和扩展:dnfinstallgnome-tweaksgnome-extensions-app推荐扩展:user-themeseye-and-mouse-extendedjust-perfectionnothing-to-saytransparent-window-moving......