第二种和第四种常用
实现步骤:
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文件同第二种