6

开发跨设备的鸿蒙(HarmonyOS) App

 3 years ago
source link: https://blog.csdn.net/nokiaguy/article/details/109476131
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

开发跨设备的鸿蒙(HarmonyOS) App

为了让更多的人看到本文,请各位读者动动小手,点击右上角【...】,将本文分享到朋友圈,thanks! 

现在的智能设备种类越来越多,而且这些智能设备的屏幕尺寸、分辨率都不同,例如,比较常见的智能设备有手机、平板电脑、车载电脑、智能电视、智能手表等。尽管这些设备都有屏幕,但它们的屏幕千差万别,有的屏幕尺寸小,有的屏幕尺寸大,有的是纵向的屏幕,有的是横向的屏幕,有的带触摸功能,有的不带触摸功能,甚至有的设备的屏幕是圆形(如智能手表),这就给开发App带来了麻烦。现在几乎每一个智能设备厂商,如Apple、华为都面临这个问题。这就要求我们开发的App尽可能适合更多的智能设备。

当然,最简单,最直接的方式是为每一类智能设备单独开发App。例如,为手机开发一款App,为智能电视开发一款App,为智能手表开发一款App。这么做尽管从技术上是可行的,但由于这些不同设备的App,尽管在UI展现上不同,但大多数逻辑代码是相同的。如果单独为不同的设备开发App,将会造成大量的代码冗余。所以我推荐的方案是让一个App同时适用于不同的智能设备。基本的原理是在App运行时会自动检测当前的设备,然后会执行与特定设备相关的代码,使用与特定设备相关的布局和资源。

这里的关键点是检测当前的设备类型。在创建HarmonyOS工程时,要么创建TV(华为智慧屏)工程,要么创建Wearable(智能手表)工程,所以使用模板创建的HarmonyOS工程只能在一类设备(TV或Wearable)中运行。读者可以通过config.json文件的deviceType属性查看当前工程可以运行的设备类型,如果创建的是TV工程,deviceType属性的值如下:

如果创建的是Wearable工程,deviceType属性的值如下:

如果deviceType属性的值是tv,当前工程是不能在智能手表上运行的,反之亦然。要想让当前工程同时在TV和Wearable上运行,需要同时指定tv和wearable(要手动修改config.json文件),配置代码如下:

当完成deviceType属性的设置后,当前工程就可以同时在TV和Wearable上运行了。不过由于TV和Wearable的屏幕尺寸相差太多,所以布局通常会采用完全不同的样式。在HarmonyOS中,可以使用Java语言动态创建组件的方式实现布局,也可以使用布局文件。关于布局文件的使用,在后面的文章中会详细介绍。本文主要讨论使用Java代码动态创建组件的布局方式。

在创建的HarmonyOS工程中会自动生成一个样例代码,这些代码主要集中在MainAbilitySlice.java文件中的onStart方法中,代码如下:

读者并不需要对这段代码的每一行都了解,只需要知道这段代码将背景设为白色,并且在创建了一个用于显示文本的Text组件,并且在屏幕中心显示Hello World。如果在TV设备上运行,效果如图1所示。不过这样以来,在所有的设备中的UI都一样,但我们的目的是让不同的设备显示不同的UI,所以就需要通过下面的代码判断当前设备的类型。

format,png

其中getDeviceType方法返回的值就是App当前运行设备的类型。如果运行在TV上,值为tv,如果运行在智能手表上,值为wearable。所以可以用下面的代码来替换onStart方法中的代码。

在这段代码中,将TV和Wearable上显示的文本内容、文本尺寸和文本颜色做了改变,所以在TV和Wearable上显示的文本是不同的。在TV上显示的效果如图2所示。在Wearable上显示的效果如图3所示。

format,png

图2 在TV上显示的效果

format,png

图3 在Wearable上显示的效果

- EOF -

推荐阅读  点击标题可跳转

1. 比Python更牛的语言有吗?看我用元类(metaclass)花式创建Python类

2. 见鬼!导入Python模块执行了所有代码,你不知道__name__变量是什么意思吗?

3. 连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?

4. 牛掰了!鸿蒙与Android完美融合,将鸿蒙设备当Android设备用

5. 【鸿蒙学院】鸿蒙App开发直播学员提问与回答

6. 【鸿蒙学院】鸿蒙IDE:下载、安装DevEco Studio

7.  Python高效编程之88条军规(2):你真的会格式化字符串吗?

关注「极客起源」公众号,加星标,不错过精彩技术干货

蒙娜丽宁 expertNew.png 公众号:极客起源 达芬奇 UM
更多精彩内容请关注微信公众号:「极客起源」,东北大学计算机专业硕士。UnityMarvel创始人,企业内训讲师、IT畅销书作者,CSDN学院讲师,拥有多年软件开发经验和培训经验。主要著作包括《Python从菜鸟到高手》、《Python爬虫技术:深入理解原理、技术与开发》,培训企业学员数千人。制作在线课程数千小时。更多视频课程,请访问我的B站:https://space.bilibili.com/477001733

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK