Harmony:NativeUI界面添加

1 NativeAbilityFwk框架

  对于hi3321芯片的brandy sdk而言,ui的开发是基于NativeAbilityFwk应用框架;

  NativeAbilityFwk是基于穿戴产品的特点从鸿蒙原生Native中裁剪定制的轻量级UI;

  

  JSAbility由JavaScript编写;通过ACE注册到AMS中管理,先放着;

  NativeAbility由C++编写;通过LauncherAbility注册到AMS中管理;NativeAbility只有一个,可以管理多个Slice的生命周期;

2 添加sliceID

  添加slice的时候,首先为待添加页面定义一个id,在NativeAbility中通过ID来管理和切换页面和视图;

//need_add
//AppViewIDs.h   
typedef enum : uint16_t {
    VIEW_INVALID = 0,
    VIEW_MAIN = 1,
    //...
    VIEW_MAX_INTER_APP,
} AppViewId;

3 添加slice信息

  添加slice的时候,需要将slice信息添加到NativeAbility中管理;

  3.1 NativeAbilityFwk的入口函数

    这部分是程序ui入口执行的逻辑流,不用修改,只是为了结构清晰;

//don't need add;
//NativeAbility.cpp
void NativeAbility::InstallAbility(void){
    InstallNativeAbility(nullptr, this);
    NativeLauncher::GetInstance().InitNativeLauncher();
    return;
}

//NativeLauncher.cpp
void NativeLauncher::InitNativeLauncher() {
    GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE,\
                                   OHOS::VECTOR_FONT_DIR, DEFAULT_VECTOR_FONT_FILENAME);
    InitBtHeadsetEvent(); 
    //cae:把每个initSlices函数都调用了一遍,把创建的实例和ID对应上
    InitAllNativeSlices();    
    CallerLogModel::GetInstance()->InitPhoneService();
    PresenterTask::GetInstance()->Init();
    PlayersModel::GetInstance()->AudioInit();
    ActivityModel::GetInstance()->Init();
    ScreenModels::GetInstance()->InitCardConfig();
    VocassistModel::GetInstance()->Init();
    HeartModel::GetInstance()->Init();
    BluetoothModel::GetInstance()->Init();
    ScreenModels::GetInstance()->PreLoadAppimages();
    NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN_SAMPLE);
}

void NativeLauncher::InitAllNativeSlices(void){
    uint16_t size = sizeof(SLICE_MAPPER) / sizeof(SLICE_MAPPER[0]);
    for (int index = 0; index < size; index++) {
        
        if ((SLICE_MAPPER[index].id >= VIEW_MAX_INTER_APP))   continue;
        //cae:将SLICE_MAPPER[]中的每个地址以函数指针的形式调用;
        ( this->*(SLICE_MAPPER[index].func) )();
    
### 关于 DevEco Studio 5.0 中 ArkTS 结构体的使用 在 DevEco Studio 的开发环境中,ArkTS 是一种轻量级的语言设计,主要用于鸿蒙生态下的 UI 开发。通过结合 NDK 接口以及 ArkUI 提供的功能模块,开发者可以高效地实现跨平台的应用程序开发。 #### 创建支持 ArkTS 的项目 为了使用 ArkTS 进行开发,在创建项目时需选择 `Native C++` 类型,并指定语言为 ArkTS 或 eTS[^1]。这一步骤会初始化项目的框架并生成基础文件结构。 #### 配置 CMakeLists 文件 在实际开发过程中,需要确保 CMakeLists.txt 正确配置依赖库。例如,添加必要的 `.so` 动态链接库以支持功能扩展: ```cmake target_link_libraries(entry PUBLIC libace_napi.z.so libhitrace_ndk.z.so) ``` 上述代码片段展示了如何引入 `libhitrace_ndk.z.so` 库来增强性能追踪能力[^2]。 #### 使用 ArkTS 构造界面逻辑 对于 ArkTS 的具体使用场景,可以通过调用 ArkUI 提供的原生接口完成复杂交互逻辑的设计。以下是关于 ArkUI_NativeNodeAPI_1 的典型用法示例: ```cpp #include "NativeModule.h" void CreateComponentAndSetProperty() { auto nativeModule = NativeModule::NativeModuleInstance::GetInstance(); auto api = nativeModule->GetNativeNodeAPI(); // 调用 API 创建组件实例 void* componentHandle = api->CreateComponent("Button"); // 设置组件属性 api->SetAttribute(componentHandle, "text", "Click Me"); } ``` 此代码片段利用了 ArkUI 的 NDK 接口,动态生成了一个按钮控件,并为其设置了显示文字属性[^3]。 --- ### 注意事项 - **版本兼容性**:确认当前使用的 DevEco Studio 版本是否完全支持最新的 ArkTS 和相关工具链。 - **文档查阅**:建议深入阅读官方提供的《HarmonyOS NDK 开发指南》及相关技术博客文章。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值