(3.1)HarmonyOS鸿蒙单击事件4种写法

简介: (3.1)HarmonyOS鸿蒙单击事件4种写法

第二种和第四种常用


实现步骤:

1.通过id找到组件。

2.给需要的组件设置单击事件。

3.实现ClickedListener接口。

4.重写onClicked方法。


第一种,自定义实现类(在当前类外面写实现类)


①MainAbilitySlice.java文件


package com.example.yeman.slice;
import com.example.yeman.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //给按钮绑定一个点击事件
        but.setClickedListener(new MyListenner());
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
//第一种,自定义实现类
class MyListenner implements Component.ClickedListener{
    @Override
    public void onClick(Component component) {
        //component所有组件的父类
        //参数是被点击的组件
        Button btn = (Button)component;
        btn.setText("第1种被点");
    }
}


②ability_main.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">
    <Button
        ohos:id="$+id:but"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="blue"
        ohos:text="请点击我"
        ohos:text_size="150"/>
</DirectionalLayout>


第二种,当前类作为实现类(在当前类引入)

比第一种好在可以改变其他组件,如代码中,点击按钮,修改文本组件文本内容。


①MainAbilitySlice.java文件


package com.example.yeman.slice;
import com.example.yeman.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener{
    Text txt;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //找到文本框组件
        txt = (Text) findComponentById(ResourceTable.Id_txt);
        //给按钮绑定一个点击事件
        but.setClickedListener(this);
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
    //第二种,当前实现类
    @Override
    public void onClick(Component component) {
        //component所有组件的父类
        //参数是被点击的组件
        txt.setText("你点击了按钮");
    }
}


②ability_main.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:txt"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:text="这是文本组件"
        ohos:text_size="100"/>
    <Button
        ohos:id="$+id:but"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="blue"
        ohos:text="请点击我"
        ohos:text_size="150"/>
</DirectionalLayout>


第三种,匿名内部类(只能用一次)


①MainAbilitySlice.java文件


package com.example.yeman.slice;
import com.example.yeman.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
public class MainAbilitySlice extends AbilitySlice {
    Text txt;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //找到文本框组件
        txt = (Text) findComponentById(ResourceTable.Id_txt);
        //给按钮绑定一个点击事件
        but.setClickedListener(new Component.ClickedListener() { //第三种,匿名内部类
            @Override
            public void onClick(Component component) {
                //component所有组件的父类
                //参数是被点击的组件
                txt.setText("你点击了按钮");
            }
        });
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}


②ability_main.xml文件同第二种


第四种,引用方法


①MainAbilitySlice.java文件


package com.example.yeman.slice;
import com.example.yeman.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
public class MainAbilitySlice extends AbilitySlice {
    Text txt;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //找到按钮。
        // 说明:findComponentById返回的是父类对象所有组件,因此需要(Button)强转。
        Button but = (Button) findComponentById(ResourceTable.Id_but);
        //找到文本框组件
        txt = (Text) findComponentById(ResourceTable.Id_txt);
        //给按钮绑定一个点击事件
        but.setClickedListener(this::onClick);
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
    //第四种,引用方法
    public void onClick(Component component) {
        //component所有组件的父类
        //参数是被点击的组件
        txt.setText("你点击了按钮");
    }
}


②ability_main.xml文件同第二种



相关文章
|
1月前
|
编解码 视频直播 开发工具
|
1月前
|
IDE 开发工具 Windows
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
68 0
|
17天前
|
安全 调度
鸿蒙HarmonyOS实战-Stage模型(线程模型)
本文介绍了线程作为操作系统调度的最小单位,是进程中的执行流,具有轻量级、并发执行、共享资源、通信简单和上下文切换等特点。线程分为用户线程和内核线程,其中内核线程由操作系统管理,而用户线程由应用程序控制。线程用于提高程序性能和响应速度,尤其适合多任务并发处理。在HarmonyOS中,每个应用有主线程负责UI和 ArkTS 引擎管理,以及Worker线程执行耗时任务。线程间通信可通过Emitter实现事件同步和Worker进行异步操作。
|
1月前
|
Java 开发工具 Android开发
鸿蒙HarmonyOS 与 Android 的NDK有什么区别?
鸿蒙(HarmonyOS)和Android的NDK(Native Development Kit)是两个不同的概念,它们在设计理念、架构、开发方式和目标平台等方面存在着一些显著的不同。
35 0
|
1月前
|
IDE API 开发工具
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Scroll容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Scroll容器组件
222 0
|
1月前
|
IDE API 开发工具
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Row容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Row容器组件
45 1
|
1月前
|
IDE 开发工具 Windows
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之FlowItem容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之FlowItem容器组件
42 1
HarmonyOS实战—单击事件的四种写法
HarmonyOS实战—单击事件的四种写法
132 0
HarmonyOS实战—单击事件的四种写法
|
10月前
|
IDE JavaScript API
HarmonyOS开发第一步,熟知开发工具DevEco Studio
本文主要以常见的功能点作为概述希望可以帮助到学习HarmonyOS的开发者。
264 0
|
19天前
|
JavaScript API
鸿蒙开发接口UI界面:【@ohos.mediaquery (媒体查询)】
鸿蒙开发接口UI界面:【@ohos.mediaquery (媒体查询)】
22 1