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) )();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值