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页面
- 新建布局对象,添加文本对象,设置文本形状
- 将文本对象添加进布局,在UI中加入布局
xml页面
- 添加按钮/页面标签,在标签中加入相应元素
- 在abilitySlice中通过资源表调用
链接页面
- 创建按钮对象,调用鸿蒙API,添加点击事件
- 重写点击方法,添加跳转的包名、ability名
组件布局事件
屏幕展示出的元素都是组件;多个组件的摆放方式就是布局,组件必须添加到布局中才能显现出来;事件就是可以被组件识别的操作。
事件
常见的事件:单击,双击,长按,滑动
component是所有组件的父类,调用子类方法需要强制类型转换
给按钮设置单击事件,自己写一个类实现点击监听器接口,并重写点击方法,最后编写点击方法体
单击事件的四种写法
- 定义实现类:点击后不需要操作其它组件对象
- 当前类作为实现类:点击后需要操作其它组件对象
- 匿名内部类:不需要定义新类,不需要实施接口,但只能使用一次
- 方法引用:新方法的返回类型和形参需要与抽象接口的方法保持一致
双击事件的写法
一定要注意重名的!!!
长按事件同上,换方法就行,闪退bug不知道原因
滑动事件的写法
- 滑动的三个动作:按下、滑动、松开
- 手指的位置:坐标,手机左上角是原点,第一卦限
- 部分需要限制坐标范围
- 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,自动换行默认是关
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