赞
踩
首先在: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); } }
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>
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) { // 此处添加按钮被点击需要执行的操作 ,见下方的点击事件代码 } }); } } }
不同的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);
不同的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()); //...
在就是在你需要的地方加上跳转动作
text.setClickedListener(component->{
Intent intent1 = new Intent();
intent1.setAction("other1"); //关键是配置文件里注册路由
startAbility(intent1);
});
无参跳转
text.setClickedListener(component->{
Intent intent1 = new Intent();
//第一个参数是要跳转的abilitySlice 实例 第二个参数是跳转意图
present(new OtherSlice1(),intent1);
});
带参跳转
text.setClickedListener(component->{
Intent intent1 = new Intent();
//加参数
intent1.setParam("paramKey","paramValue");
//第一个参数是要跳转的abilitySlice 实例 第二个参数是跳转意图
present(new OtherSlice1(),intent1);
});
//接收的abilitySlice,这里get的类型有很多 要根据传的值进行选择
String str = intent.getStringParam("paramKey");
接收返回值的跳转
//跳转页面 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(); });
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。