Tips:
在上一篇中,分享了如何页面跳转。今天就继续详细讲讲点击事件,明天会继续分享双击事件和长按事件
1.点击事件
在HarmonyOS中有四种点击事件,接下来我们分别介绍一下四种点击事件,以及如何实现
1.自定义实现类
在我们的xml文件下定义buttom标签,如下所示:
<?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:aBtn"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="red"
ohos:text_size="40fp"
ohos:text_color="white"
ohos:text="我是按钮"/>
</DirectionalLayout>
在我们java文件中如下定义点击事件:
package com.example.mydeom;
import com.example.mydeom.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class MainAbility extends Ability {
//定义一个Button变量
private Button bTn;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
//主入口
super.setMainRoute(MainAbilitySlice.class.getName());
//设置UI内容
super.setUIContent(ResourceTable.Layout_ability_main);
//根据组件ID找到我们定义在页面中的buttom
bTn =(Button) findComponentById(ResourceTable.Id_aBtn);
bTn.setClickedListener(new MyClick());
}
}
//定义点击事件类
class MyClick implements Component.ClickedListener{
@Override
public void onClick(Component component) {
//获取当前点击组件
Button btn=(Button) component;
//设置当前组件文本内容为“点击了”
btn.setText("点击了");
}
}
如上所以我们就可以完成自定义事件的功能了,效果如下:
点击前:点击后:
2.当前类作为实现类
创建一个新的ability Second,java代码如下,xml文件如上一个差不多:
package com.example.mydeom;
import com.example.mydeom.slice.SecondSlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class Second extends Ability implements Component.ClickedListener {
private Button bTn;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(SecondSlice.class.getName());
//根据组件ID找到我们定义在页面中的buttom
bTn =(Button) findComponentById(ResourceTable.Id_bBtn);
//给bTn绑定当前类的点击事件
bTn.setClickedListener(this);
}
@Override
public void onClick(Component component) {
bTn.setText("点击了");
}
}
3.匿名内部类
匿名内部类具体代码如下:
package com.example.mydeom;
import com.example.mydeom.slice.ThreeSlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class Three extends Ability {
private Button bTn;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(ThreeSlice.class.getName());
//根据组件ID找到我们定义在页面中的buttom
bTn =(Button) findComponentById(ResourceTable.Id_cBtn);
//给bTn绑定当前类的点击事件
bTn.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
bTn.setText("点击了");
}
});
}
}
4.方法引用
方法引用类具体如下:
package com.example.mydeom;
import com.example.mydeom.slice.FourSlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class Four extends Ability {
private Button bTn;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(FourSlice.class.getName());
//根据组件ID找到我们定义在页面中的buttom
bTn =(Button) findComponentById(ResourceTable.Id_dBtn);
//给bTn绑定当前类的点击事件
bTn.setClickedListener(this::onClick);
}
public void onClick(Component component) {
bTn.setText("点击了");
}
}
到这里我们就讲完了四种点击事件的实现方法了!
我会将这次的代码上传到资源上去,大家可以去下载哟
Tips:
四种点击事件的区别是什么呢?
这里具体讲解一下:
第二种事件在应用当前类中的其他组件会比第一种方便一些,那方便在哪里呢?
因为要应用当前类中的组件需要在onStar中定义,而第一种是一个独立的类,所以应用当前类组件会比较不方便
而第三种直接定义会造成当前点击事件只能实现一次的效果,如果实现一次效果的话,可以使用第三种匿名函数类的方法
第四种相当于引用当前类下中的一个方法
需要源代码的可以点击这个链接去下载HarmonyOS点击事件的四种实现方法源代码.rar-其它文档类资源-CSDN下载
分享不易,觉得不错的可以持续关注此专栏,留下一个免费点赞哟!
作者也会不定时的更新新的知识给大家的!