HarmonyOS的UI框架(如Java UI和JS UI)如何使用?如何实现跨设备的自适应布局?
HarmonyOS提供两种UI开发框架:Java UI框架(传统方式)和JS UI框架(轻量级Web化开发),目前推荐使用新一代ArkUI框架(基于TypeScript的声明式开发范式)。
关键组件:
<!-- 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>
示例:
<!-- 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通过以下机制适配不同屏幕尺寸和设备类型:
DirectionalLayout
、DependentLayout
等布局容器。百分比布局:
<Component
ohos:width="50%vp" <!-- 视窗宽度的50% -->
ohos:height="30%fp" <!-- 设备独立像素的30% -->
/>
资源目录通过后缀匹配设备类型:
resources/
├─base/ # 默认资源
├─phone/ # 手机
├─tablet/ # 平板
└─wearable/ # 穿戴设备
媒体查询:根据设备属性动态调整样式。
/* JS UI中根据屏幕宽度适配 */
@media (device-type: wearable) {
.title { font-size: 20px; }
}
GridContainer
等组件。Flex
、Grid
、RelativeContainer
)。示例(eTS语言):
@Entry
struct Index {
build() {
Flex({ direction: FlexDirection.Column }) {
Text('自适应文本')
.fontSize(16)
.maxLines(1)
.margin({ top: '10%' }) // 按百分比留白
}
.width('100%')
.height('100%')
}
}
提示:从HarmonyOS 3.0开始,ArkUI(eTS)成为主推框架,建议新项目优先采用声明式开发范式。
1 回答749 阅读✓ 已解决
1 回答1k 阅读
1 回答846 阅读
1 回答819 阅读
1 回答733 阅读
1 回答715 阅读
1 回答669 阅读
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架构。
实现跨设备的自适应布局可以使用百分比布局或者响应式布局。