【鸿蒙 HarmonyOS】Ability 中使用纯代码绘制布局及 UI 组件

简介: 【鸿蒙 HarmonyOS】Ability 中使用纯代码绘制布局及 UI 组件

文章目录

一、Ability 与 Slice 简介

二、Ability 中使用纯代码绘制布局及 UI 组件

三、Ability 中使用纯代码绘制布局及 UI 组件代码示例

四、GitHub 地址





一、Ability 与 Slice 简介


与 Android 相似组件类比 :


Ability 功能与 Android 中的 Activity 类似 , 相当于界面窗口 ;


AbilitySlice 功能与 Android 中的 Fragment 类似 , 相当于界面中的某一块布局 ;



Ability 与 AbilitySlice 对应关系 : 一个 Ability 窗口中可以有 零个或多个 AbilitySlice ;



在创建一个 工程或 Module 后 , 系统会自动生成一个 Ability MainAbility , 在 MainAbility 中默认使用了一个 AbilitySlice AbilitySlice ;


生成的 Ability 代码示例 : 在该 Ability 中默认使用了 AbilitySlice ;


package com.example.stacklayut;
import com.example.stacklayut.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
    }
}



生成的 AbilitySlice 代码示例 : AbilitySlice 在 onStart( ) 加载一个布局文件 , 显示该布局文件 , 同时可以使用代码对该布局文件中的 UI 组件进行各种操作 ; 其中 ResourceTable.Layout_ability_main 代表的就是 ability_main.xml 布局文件 ;


public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}




二、Ability 中使用纯代码绘制布局及 UI 组件


在 Ability 中不使用 AbilitySlice , 直接使用代码绘制组件 , 或使用布局文件 ;



使用代码绘制组件 :


使用代码绘制组件时 , 先要创建一个根布局 , 然后向根 布局中添加 UI 组件 ;


创建布局 : 创建线性布局 DirectionalLayout , 并设置线性布局方向 , 水平 / 垂直 ;


     

// 创建线性布局, 传入当前界面 Ability 对象
        DirectionalLayout directionalLayout = new DirectionalLayout(this);
        // 设置水平方向
        directionalLayout.setOrientation(Component.HORIZONTAL);



配置布局属性 : 配置布局的宽高属性 , 需要创建布局配置对象 , DirectionalLayout.LayoutConfig 类型的对象 , 设置该布局填充整个父容器 , 宽高都设置成 DirectionalLayout.LayoutConfig.MATCH_PARENT ;


   

// 配置上述线性布局
        // 创建布局配置对象 , DirectionalLayout.LayoutConfig , 构造函数中传入宽高设置
        DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig(
                        DirectionalLayout.LayoutConfig.MATCH_PARENT,
                        DirectionalLayout.LayoutConfig.MATCH_PARENT);
        // 将布局配置对象设置给布局对象
        directionalLayout.setLayoutConfig(layoutConfig);



设置布局背景颜色 : 先创建 ShapeElement 对象 , 设置其颜色为绿色 , 最后将背景设置给布局 ;


   

// 设置布局背景颜色
        // 创建背景元素
        ShapeElement shapeElement = new ShapeElement();
        // 设置绿色
        shapeElement.setRgbColor(new RgbColor(0x00, 0xFF, 0x00));
        // 将背景设置给布局
        directionalLayout.setBackground(shapeElement);



创建 Text 组件并配置其布局属性 : 创建 DirectionalLayout.LayoutConfig 对象 , 用于作为 Text 组件的布局配置 , 这里直接设置布局大小 800 x 800 ;


   

// 创建 Text 文本组件
        Text text = new Text(this);
        // 创建布局配置对象 , DirectionalLayout.LayoutConfig , 构造函数中传入宽高设置 , 这里设置成 800 x 800
        DirectionalLayout.LayoutConfig textLayoutConfig = new DirectionalLayout.LayoutConfig(
                800, 800);
        // 将布局配置对象设置给布局对象
        text.setLayoutConfig(textLayoutConfig);


设置 Text 组件背景 : 创建 ShapeElement 对象作为 Text 组件的背景 ;


 

// 设置组件背景颜色
        // 创建背景元素
        ShapeElement textShapeElement = new ShapeElement();
        // 设置绿色
        textShapeElement.setRgbColor(new RgbColor(0xFF, 0xFF, 0xFF));
        // 设置给 Text 组件
        text.setBackground(textShapeElement);


设置 Text 组件文字相关属性 : 设置文本颜色 , 字体大小 , 显示文本内容 , 对齐方式 ;


   

// 设置文字显示
        // 设置文字颜色
        text.setTextColor(Color.RED);
        // 设置文字大小
        text.setTextSize(50);
        // 设置显示的文本
        text.setText("代码创建的 Text 组件");
        // 设置对齐方式 , 居中
        text.setTextAlignment(TextAlignment.CENTER);


将 Text 组件添到布局中 :


 

// 将组件添加到布局中
        directionalLayout.addComponent(text);


Ability 界面显示该布局 :


     

// Ability 显示上述创建的布局
        super.setUIContent(directionalLayout);






三、Ability 中使用纯代码绘制布局及 UI 组件代码示例


下面的示例就是使用代码绘制组件的示例 :


package com.example.abilitycode;
import com.example.abilitycode.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.colors.RgbColor;
import ohos.agp.components.Component;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.Text;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.agp.utils.TextAlignment;
public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        //super.setMainRoute(MainAbilitySlice.class.getName());
        // 使用代码生成 UI 布局与组件
        // 创建线性布局, 传入当前界面 Ability 对象
        DirectionalLayout directionalLayout = new DirectionalLayout(this);
        // 设置水平方向
        directionalLayout.setOrientation(Component.HORIZONTAL);
        // 配置上述线性布局
        // 创建布局配置对象 , DirectionalLayout.LayoutConfig , 构造函数中传入宽高设置
        DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig(
                        DirectionalLayout.LayoutConfig.MATCH_PARENT,
                        DirectionalLayout.LayoutConfig.MATCH_PARENT);
        // 将布局配置对象设置给布局对象
        directionalLayout.setLayoutConfig(layoutConfig);
        // 设置布局背景颜色
        // 创建背景元素
        ShapeElement shapeElement = new ShapeElement();
        // 设置绿色
        shapeElement.setRgbColor(new RgbColor(0x00, 0xFF, 0x00));
        // 将背景设置给布局
        directionalLayout.setBackground(shapeElement);
        // 创建 Text 文本组件
        Text text = new Text(this);
        // 创建布局配置对象 , DirectionalLayout.LayoutConfig , 构造函数中传入宽高设置 , 这里设置成 800 x 800
        DirectionalLayout.LayoutConfig textLayoutConfig = new DirectionalLayout.LayoutConfig(
                800, 800);
        // 将布局配置对象设置给布局对象
        text.setLayoutConfig(textLayoutConfig);
        // 设置组件背景颜色
        // 创建背景元素
        ShapeElement textShapeElement = new ShapeElement();
        // 设置绿色
        textShapeElement.setRgbColor(new RgbColor(0xFF, 0xFF, 0xFF));
        // 设置给 Text 组件
        text.setBackground(textShapeElement);
        // 设置文字显示
        // 设置文字颜色
        text.setTextColor(Color.RED);
        // 设置文字大小
        text.setTextSize(50);
        // 设置显示的文本
        text.setText("代码创建的 Text 组件");
        // 设置对齐方式 , 居中
        text.setTextAlignment(TextAlignment.CENTER);
        // 将组件添加到布局中
        directionalLayout.addComponent(text);
        // Ability 显示上述创建的布局
        super.setUIContent(directionalLayout);
    }
}


运行效果 :

image.png







四、GitHub 地址


GitHub 主应用 : https://github.com/han1202012/HarmonyHelloWorld


ListContainer 组件示例 Module :https://github.com/han1202012/HarmonyHelloWorld/tree/master/abilitycode


目录
相关文章
|
12天前
|
开发者 容器
鸿蒙开发:弹性布局Flex
在实际的开发中,需要掌握主轴与交叉轴的关系、换行规则及子元素属性,同时注意性能与兼容性问题,还有一点,Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。
57 10
鸿蒙开发:弹性布局Flex
|
13天前
|
JavaScript
HarmonyOS NEXT鸿蒙实现自定义组件插槽
在HarmonyOS NEXT中,通过`@BuilderParam`装饰器实现类似Vue-Slot或React-RenderProps的功能,允许将UI结构的函数作为参数传递给组件并在指定位置渲染。具体步骤如下:
28 5
HarmonyOS NEXT鸿蒙实现自定义组件插槽
|
13天前
|
容器
鸿蒙开发:相对布局RelativeContainer
当然了,RelativeContainer组件还有着其它的属性,但是最重要的也就是位置的摆放,其实也就是相对于锚点组件的摆放;通过上述的案例,我们不难发现,所谓的左上右下,反着来就是对的,比如在锚点上边,我用bottom,在锚点下面,我用top,在实际的开发中,可极大节约我们的开发时间。
鸿蒙开发:相对布局RelativeContainer
|
1月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
58 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
27天前
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
134 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
8天前
|
开发框架 缓存 自然语言处理
HarmonyOS ArkTS声明式UI开发实战教程
本文深入探讨了ArkTS作为HarmonyOS生态中新一代声明式UI开发框架的优势与应用。首先对比了声明式与命令式开发的区别,展示了ArkTS如何通过直观高效的代码提升可维护性。接着分析了其核心三要素:数据驱动、组件化和状态管理,并通过具体案例解析布局体系、交互组件开发技巧及复杂状态管理方案。最后,通过构建完整TODO应用实战,结合调试优化指南,帮助开发者掌握声明式UI设计精髓,感受ArkTS的独特魅力。文章鼓励读者通过“破坏性实验”建立声明式编程思维,共同推动HarmonyOS生态发展。
41 3
|
8天前
|
开发者 容器
HarmonyOS NEXT 实战系列02-布局基础
ArkTS通过声明式编程构建应用UI,支持属性、事件和子组件配置。线性布局(LinearLayout)使用Row和Column实现水平或垂直排列,提供多种对齐方式如Start、Center等。基础组件如Text、Button具备通用属性(width、height等)与尺寸单位(vp、fp)。样式设置涵盖文本样式、背景、间距、边框等。扩展机制包括@Extend重用样式、@Styles简化样式定义、@Builder复用UI元素,支持条件渲染(if/else)和循环渲染(ForEach)。这些功能帮助开发者高效构建灵活的用户界面。
|
20天前
|
Android开发 UED iOS开发
Harmony os next~UI开发与ArkUI框架
鸿蒙OS的UI开发基于ArkUI框架,采用声明式编程,简化开发流程。五大核心组件(Text、Button、List、Grid、Flex)助力高效布局,支持数据绑定与动态更新。事件响应机制灵敏,适合构建交互丰富的应用。实战技巧包括规范命名、样式复用和调试方法。掌握这些,轻松开发鸿蒙应用。下期预告:分布式开发,记得带上烤冷面!
27 0
|
20天前
|
XML 存储 大数据
Harmony os next~HarmonyOS Ability与页面跳转开发详解
HarmonyOS采用分布式架构,其Ability体系包括Page、Service、Data和Form四大类型Ability。Page Ability支持多页面跳转与数据传递,Service Ability用于后台任务,Data Ability提供数据共享接口,Form Ability实现轻量化卡片服务。本文详细解析了各Ability的开发方法、生命周期管理、跨Ability通信及最佳实践,帮助开发者掌握HarmonyOS应用开发的核心技能。
75 0
|
1月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
187 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex

热门文章

最新文章