HarmonyOS UI怎么开发?

HarmonyOS的UI框架(如Java UI和JS UI)如何使用?如何实现跨设备的自适应布局?

阅读 1.1k
avatarAI BotBETA

HarmonyOS UI开发基础

HarmonyOS提供两种UI开发框架:Java UI框架(传统方式)和JS UI框架(轻量级Web化开发),目前推荐使用新一代ArkUI框架(基于TypeScript的声明式开发范式)。


一、Java UI 与 JS UI 框架使用

1. Java UI框架(适合Android开发者)

  • 核心思想:类似Android的XML + Java代码模式,支持声明式布局。
  • 关键组件

    <!-- XML布局示例 -->
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:width="match_parent"
        ohos:height="match_parent">
        <Text
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:text="Hello HarmonyOS"/>
    </DirectionalLayout>
  • 适用场景:复杂交互逻辑或需直接调用系统API的场景。

2. JS UI框架(适合Web开发者)

  • 核心思想:基于HML(HTML-like)、CSS、JS分离的轻量级开发。
  • 示例

    <!-- HML文件 -->
    <div class="container">
      <text class="title">Hello {{message}}</text>
    </div>
    /* CSS文件 */
    .container { flex-direction: column; }
    .title { font-size: 30px; }
    // JS逻辑
    export default { data: { message: 'HarmonyOS' } }
  • 适用场景:快速开发轻量级应用或跨平台需求。

二、跨设备自适应布局实现

HarmonyOS通过以下机制适配不同屏幕尺寸和设备类型:

1. 弹性布局与百分比

  • 使用DirectionalLayoutDependentLayout等布局容器。
  • 百分比布局

    <Component
      ohos:width="50%vp"  <!-- 视窗宽度的50% -->
      ohos:height="30%fp" <!-- 设备独立像素的30% -->
    />

2. 资源分级管理

  • 资源目录通过后缀匹配设备类型:

    resources/
      ├─base/          # 默认资源
      ├─phone/         # 手机
      ├─tablet/        # 平板
      └─wearable/      # 穿戴设备
  • 自动加载符合当前设备的资源(如图片、布局文件)。

3. 响应式布局

  • 媒体查询:根据设备属性动态调整样式。

    /* JS UI中根据屏幕宽度适配 */
    @media (device-type: wearable) { 
      .title { font-size: 20px; }
    }
  • 栅格系统:通过栅格断点(xs/sm/md/lg)划分屏幕尺寸,使用GridContainer等组件。

4. ArkUI自适应能力(推荐)

  • 使用声明式UI的自适应组件(如FlexGridRelativeContainer)。
  • 示例(eTS语言):

    @Entry
    struct Index {
      build() {
        Flex({ direction: FlexDirection.Column }) {
          Text('自适应文本')
            .fontSize(16)
            .maxLines(1)
            .margin({ top: '10%' }) // 按百分比留白
        }
        .width('100%')
        .height('100%')
      }
    }

三、开发工具

  1. DevEco Studio:官方IDE,提供多设备实时预览。
  2. 预览器:支持手机、手表、平板等多设备形态模拟。
提示:从HarmonyOS 3.0开始,ArkUI(eTS)成为主推框架,建议新项目优先采用声明式开发范式。
1 个回答

JS UI 框架
1.前端
前端主要是JavaScript的前端框架。这里采用的是类web的前端开发模式,开发相应的UI。
2.后端
后端主要分为以下几个部分:
UI引擎部分
即呈现的构建部分,这当中包含JS执行引擎本身, 由C++构建的声明式UI后端引擎(包括UI组件实现、布局视图、动画事件)和渲染引擎,这些共同构建了整个UI的呈现。
中间转换层
通过中间转化层,把前面JS的UI描述,转化成声明式UI,让后端引擎去执行。
能力扩展
HarmonyOS提供“扩展API“包括各种各样的分布式能力、系统的基础能力。通过能力扩展基础设施,开发者可以调用JavaScript API来实现更丰富的逻辑功能。
跨平台的适配层
从设计上来说,HarmonyOS可以实现跨设备跨OS。主要是因为整个渲染路径是由后端完全自己绘制的,通过一个底层画布来实现UI功能,这样对OS的依赖相对较少,能达到跨平台的效果。
平台桥接层
从架构设计上来说,我们是可以运行在HarmonyOS上,其实也可以在其他OS上运行。这里前提条件是HarmonyOS会与其他OS内的基础设施以及基础能力做桥接,从而达到能力扩展的目标。

Java UI框架
与JS的声明式不同,Java更多是面向命令式开发模式,从API维度而言会更加丰富更加细粒度一点。也拥有多态控件,布局等能力。
从逻辑上来说,它的整个架构分为五个部分。
Java UI框架接口层
包括控件、布局、动效和描述。
多态控件、布局和动效实现
核心的C++层,有相应的多态控件布局,各种各样动效实现。
视图管理
生成UI控件对应的View对象,管理View对象的生命周期(更新,挂载,卸载,删除),维护View对象组成的UI hierarchies关系。
渲染树
维护View对象对应的Render Node, 维护UI组件变更引起的渲染树的变更,生成Render Node对应 Draw Command。
2D/3D渲染引擎
执行Draw Command, 生成UI控件所包含的线条,面,文本对象。
最终到系统的合成,总体构成了整个ACE Java架构。

实现跨设备的自适应布局可以使用百分比布局或者响应式布局。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进