当前位置:   article > 正文

鸿蒙点击事件(监听点击、页面跳转)_harmonyos如何监听系统桌面被点击了

harmonyos如何监听系统桌面被点击了

鸿蒙点击事件:

首先在:entry 目录下的src =>main=>java 的文件夹下面的任意一个包下面的Ability类对应的AbilitySlice(创建Ability就自动生成AbilitySlice)对应的页面 创建一个据有点击事件的组件,本例子使用按钮:

按钮创建:

创建方式有两种:
1、编程式创建(在AbilitySlice中,详见官方文档https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-layout-xml-0000000000500395)

@Override
        public class 你的AbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // 声明布局
        DirectionalLayout directionalLayout = new DirectionalLayout(getContext());
        // 设置布局大小
        directionalLayout.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
        directionalLayout.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT);
        // 设置布局属性
        directionalLayout.setOrientation(Component.VERTICAL);
        directionalLayout.setPadding(32, 32, 32, 32);

        // 为组件添加对应布局的布局属性
        DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_CONTENT, ComponentContainer.LayoutConfig.MATCH_CONTENT);
        
        // 添加一个Button
        Button button = new Button(getContext());
        layoutConfig.setMargins(0, 50, 0, 0);
        button.setLayoutConfig(layoutConfig);
        button.setText("我是button文字");
        button.setTextSize(50);
        ShapeElement background = new ShapeElement();
        background.setRgbColor(new RgbColor(0, 125, 255));
        background.setCornerRadius(25);
        button.setBackground(background);
        button.setPadding(10, 10, 10, 10);
        button.setClickedListener(new Component.ClickedListener() {
            @Override
            // 在组件中增加对点击事件的检测
            public void onClick(Component component) {
                // 此处添加按钮被点击需要执行的操作 ,见下方的点击事件代码
            }
        });
        directionalLayout.addComponent(button);

        // 将布局作为根布局添加到视图树中
        super.setUIContent(directionalLayout);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

2、XML创建(在entry 目录下的src =>main=>resources=>base=>layout 中上面那个Ability类对应的AbilitySlice对应的页面的xml 文件中)

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical"
    ohos:padding="32">
    <Text
        ohos:id="$+id:text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:text="下面就是button,注意id是这里定义的"
        ohos:text_size="25fp"/>
    <Button
        ohos:id="$+id:button"
        ohos:margin="50"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:text="My name is Button."
        ohos:text_size="50"/>
</DirectionalLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
点击事件调用:

XML创建完成后到AbilitySlice类中写点击事件,因为button是在xml 中创建的 所以AbilitySlice中就不像上面的编程式创建那样还需要声明布局什么的了,直接获取id然后通过id进行事件的监听就行

@Override
        public class 你的AbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
         super.onStart(intent);
        super.setMainRoute(你的AbilitySlice.class.getName());
        //在这里获取xml 布局里面的button Id是在xml 页面中通过下面的语句定义的 $+id:这里写id
        //ohos:id="$+id:button"
        //直接粘贴有时候引入会有问题
        //import ohos.agp.components.Button;
        //或者敲个Button也能找到
         Button button = (Button) findComponentById(ResourceTable.Id_button);
        if (button != null) {
            button.setClickedListener(new Component.ClickedListener() {
                @Override
                // 在组件中增加对点击事件的检测
                public void onClick(Component component) {
                     // 此处添加按钮被点击需要执行的操作 ,见下方的点击事件代码
                }
            });
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

点击事件:

1、页面跳转

1.1不同的page

不同的page 跳转都是主abilitySlice

// 页面跳转官方文档链接https://developer.harmonyos.com/cn/docs/documentation/doc-references/intent_operationbuilder-0000001054119948
// ohos.aafwk.content.Intent.OperationBuilder
//跳转意图
Intent intent1 = new Intent();
Operation operation = new Intent.OperationBuilder()
                     .withDeviceId("")// 跳转的目的设备,空字符串表示本机
                     .withBundleName("com.example.myapplication")//跳转的目标界面所在的应用,可从config.json的app找到bundleName
                     .withAbilityName("com.example.myapplication.SecondAblility")//要跳转的Ability,可从config.json的module的abilities的name找到本包可简写为Ability的名字,比如本例可简写为SecondAblility
                     .build();
intent1.setOperation(operation);
//实现跳转
startAbility(intent1);


//简化写法
//跳转意图
Intent intent1 = new Intent();
//三个参数分别对应operation 的withDeviceId,withBundleName,withAbilityName
intent1.setElementName("","com.example.myapplication","com.example.myapplication.IntentPageAbility");
//实现跳转
startAbility(intent1);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

不同的page 一个页面跳转另一个页面的非主abilitySlice

首先要先在ability下面注册一下

//这个是主路由 也就是页面打开以后要看到的 有且只有一个
setMainRoute(MainSlice.class.getName());
/*
这是要注册的那个abilitySlice 
第一个参数在配置文件config.json可以设置  
{
    "module": {
        "abilities": [
            {
                "skills":[
                    {
                        "actions":[
                            "other1",
                            "other2"
                        ]
                    }
                ]
                ...
            }
        ]
        ...
    }
    ...
}
第二个是要跳转的包名 可以采用反射 也可以复制粘贴全路径 建议反射 这样就是移动了也不会报错
*/
addActionRoute("other1", OtherSlice1.class.getName());
addActionRoute("other2", OtherSlice2.class.getName());
//...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

在就是在你需要的地方加上跳转动作

 text.setClickedListener(component->{
        Intent intent1 = new Intent();
        intent1.setAction("other1");  //关键是配置文件里注册路由
        startAbility(intent1);
    });
  • 1
  • 2
  • 3
  • 4
  • 5
1.2同一个 ability下的 abilitySlice

无参跳转

 text.setClickedListener(component->{
        Intent intent1 = new Intent();
        //第一个参数是要跳转的abilitySlice 实例 第二个参数是跳转意图
        present(new OtherSlice1(),intent1);
    });
  • 1
  • 2
  • 3
  • 4
  • 5

带参跳转

 text.setClickedListener(component->{
        Intent intent1 = new Intent();
        //加参数
        intent1.setParam("paramKey","paramValue");
        //第一个参数是要跳转的abilitySlice 实例 第二个参数是跳转意图
        present(new OtherSlice1(),intent1);
    });
 //接收的abilitySlice,这里get的类型有很多 要根据传的值进行选择
  String str = intent.getStringParam("paramKey");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接收返回值的跳转

//跳转页面
 text.setClickedListener(component->{
        Intent intent1 = new Intent();
        //加参数
        intent1.setParam("paramKey","paramValue");
        //第一个参数是要跳转的abilitySlice 实例 第二个参数是跳转意图 第三个参数是可以自定义的整数
        presentForResult(new OtherSlice1(),intent1,123);
    });
  //重写方法onResult来接收返回值
   @Override
    protected void onResult(int requestCode, Intent resultIntent) {
        super.onResult(requestCode, resultIntent);
        if(requestCode==123){
            String str= resultIntent.getStringParam("returnkey");
        }
    }




 //跳转到的页面
 //接收的abilitySlice,这里get的类型有很多 要根据传的值进行选择
  String str = intent.getStringParam("paramKey");
  //参数接收端返回值
  text.setClickedListener(component -> {
      //1.给跳转来的页面返回值
      Intent intent1 = new Intent();
      intent1.setParam("returnkey","returnkValue");
      setResult(intent1);
      //2.关闭本AbilityAlice,自动返回上一页
      terminate();
  });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/350286
推荐阅读
相关标签
  

闽ICP备14008679号