当前位置: 首页 > 科技观察

开发跨设备HarmonyOSApp

时间:2023-03-20 01:26:37 科技观察

更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com,与华为官方共同打造。智能设备的种类越来越多。此外,这些智能设备的屏幕尺寸和分辨率各不相同。例如,比较常见的智能设备有手机、平板电脑、车载电脑、智能电视、智能手表等。虽然这些设备都有屏幕,但是它们的屏幕差别很大,有小屏幕的,有大屏幕的,有竖屏的,有横屏的,有触摸功能的,有不带触摸功能的,甚至有些的屏幕设备是圆形的(比如智能手表),给App的开发带来了麻烦。现在几乎所有的智能设备厂商,比如苹果、华为,都面临着这个问题。这就要求我们开发的App要适配尽可能多的智能设备。当然,最简单直接的方法就是为每一种智能设备分别开发一个App。比如开发手机APP,智能电视APP,智能手表APP。虽然这样做在技术上是可行的,但由于这些不同设备的App的UI呈现方式不同,所以大部分逻辑代码都是相同的。如果针对不同的设备分别开发应用,会造成大量的代码冗余。所以我推荐的方案是做一个App同时适用于不同的智能设备。基本原理是App在运行时,会自动检测当前设备,然后执行与具体设备相关的代码,使用与具体设备相关的布局和资源。这里的重点是检测当前的设备类型。在创建HarmonyOS项目时,要么创建TV(华为智慧屏)项目,要么创建Wearable(智能手表)项目,因此使用模板创建的HarmonyOS项目只能运行在一种设备(TV或Wearable)上。读者可以通过config.json文件的deviceType属性查看当前项目可以运行的设备类型。如果创建的是TV项目,deviceType属性的值如下:"deviceType":["tv"]如果创建的是Wearable项目,deviceType属性的值如下:"deviceType":["tv"】如果deviceType属性的值为tv,则当前项目不能在智能手表上运行,反之亦然。要让当前项目同时运行在TV和Wearable上,需要同时指定tv和wearable(需要手动修改config.json文件),配置代码如下:“deviceType”:["tv","wearable"]当deviceType属性完成设置后,当前项目可以在TV和Wearable上运行。然而,由于电视和可穿戴设备的屏幕尺寸差异很大,因此布局通常采用完全不同的风格。在HarmonyOS中,可以使用Java语言动态创建组件来实现布局,也可以使用布局文件。布局文件的使用会在后面的文章中详细介绍。本文主要讨论如何使用Java代码动态创建组件布局。在创建的HarmonyOS工程中会自动生成示例代码。这些代码主要集中在MainAbilitySlice.java文件中的onStart方法中。代码如下:255,255,255));myLayout.setBackground(element);Texttext=newText(this);text.setLayoutConfig(config);text.setText("HelloWorld");text.setTextColor(newColor(0xFF000000));text.setTextSize(50);text.setTextAlignment(TextAlignment.CENTER);myLayout.addComponent(text);super.setUIContent(myLayout);}读者不需要了解这段代码的每一行,只知道这段代码将背景设置为白色,并创建了一个用于显示文本的Text组件,并在屏幕中央显示了HelloWorld。如果在电视设备上运行,效果如图1。但是这样一来,所有设备中的UI都是一样的,但是我们的目的是让不同的设备显示不同的UI,所以需要判断类型当前设备通过以下代码。if(DeviceInfo.getDeviceType().equals("tv")){...}elseif(DeviceInfo.getDeviceType().equals("wearable")){...}其中getDeviceType方法返回的值为应用当前运行的设备类型。如果在电视上运行,则值为tv;如果在智能手表上运行,该值是可穿戴的。所以可以用下面的代码来替换onStart方法中的代码。publicvoidonStart(Intentintent){super.onStart(intent);LayoutConfigconfig=newLayoutConfig(LayoutConfig.MATCH_PARENT,LayoutConfig.MATCH_PARENT);myLayout.setLayoutConfig(config);ShapeElementelement=newShapeElement();element.setRgbColor(newShapeElement();元素。setLay5.5,5,5,5)setBackground(element);Texttext=newText(this);text.setLayoutConfig(config);if(DeviceInfo.getDeviceType().equals("tv")){//运行代码在电视上执行text.setText("华为智慧屏");text.setTextColor(newColor(0xFFFF0000));text.setTextSize(200);}elseif(DeviceInfo.getDeviceType().equals("wearable")){//运行在可穿戴文本上执行的代码。setText("华为智能手表");text.setTextColor(newColor(0xFF0000FF));text.setTextSize(50);}text.setTextAlignment(TextAlignment.CENTER);myLayout.addComponent(text);super.setUIContent(myLayout);}这段代码中改变了TV和Wearable显示的文字内容、文字大小和文字颜色,所以TV和Wearable显示的文字是不一样的。在TV上显示的效果如图2所示,在Wearable上显示的效果如图3所示。图2TV展示效果图3穿戴式开放混合云展示效果助力企业成为数字原生企业分析一下鸿蒙系统helloworld程序是如何调用的,SYS_RUN是干什么的?5G为何突然“不流行”?新方向、新特性:Python3.9完整版来了请停止在Python中使用无穷无尽的列表