开发跨设备的鸿蒙(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属性的值如下:

"deviceType": [
"tv"]

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

"deviceType": [
"wearable"]

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

"deviceType": [
"tv",
"wearable"]

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

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

public void onStart(Intent intent) {super.onStart(intent);LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT,LayoutConfig.MATCH_PARENT);myLayout.setLayoutConfig(config);ShapeElement element = new ShapeElement();element.setRgbColor(new RgbColor(255, 255, 255));myLayout.setBackground(element);Text text = new Text(this);text.setLayoutConfig(config);text.setText("Hello World");text.setTextColor(new Color(0xFF000000));text.setTextSize(50);text.setTextAlignment(TextAlignment.CENTER);myLayout.addComponent(text);
super.setUIContent(myLayout);}

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

if(DeviceInfo.getDeviceType().equals("tv")) { ... ...
} else if(DeviceInfo.getDeviceType().equals("wearable")) {... ...
}

图1

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

public void onStart(Intent intent) {super.onStart(intent);LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT,LayoutConfig.MATCH_PARENT);myLayout.setLayoutConfig(config);ShapeElement element = new ShapeElement();element.setRgbColor(new RgbColor(255, 255, 255));myLayout.setBackground(element);Text text = new Text(this);text.setLayoutConfig(config);
if(DeviceInfo.getDeviceType().equals("tv")) { 
// 运行在TV上执行的代码text.setText("华为智慧屏");text.setTextColor(new Color(0xFFFF0000));text.setTextSize(200);} else if(DeviceInfo.getDeviceType().equals("wearable")) {
// 运行在Wearable上执行的代码text.setText("华为智能手表");text.setTextColor(new Color(0xFF0000FF));text.setTextSize(50);}text.setTextAlignment(TextAlignment.CENTER);myLayout.addComponent(text);super.setUIContent(myLayout);}

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

 

图2 在TV上显示的效果

图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):你真的会格式化字符串吗?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38334.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统vivo能用吗,不是华为手机,也能用上鸿蒙系统

按照此前的进度,华为的鸿蒙 OS 系统已经在 Mate40 等多款华为系手机上小范围推送,从此前公布的消息来看,应该在 6 月份正式全面开放,让更多的用户用上这套华为自研的系统。 今天,华为召开了一场鸿蒙 OS 的合作伙伴峰会…

终于有人把鸿蒙OS讲明白了!并开放鸿蒙教程!

点击“开发者技术前线”,选择“星标????” 让一部分开发者看到未来 “ 本文面向的是开发人员,主要想通过科普让大家了解一下鸿蒙开发。接下来,我想给大家科普一下这个这么火的鸿蒙系统。 到底什么是鸿蒙 OS 在官网上看到鸿蒙 OS 的简介是…

不要总想着自己训练大模型,你的业务可能并不需要

至少企业知识库是这样。 我要训练大模型,我要做私有部署,我要做模型 Fine-tune,我要搞垂类 GPT。最近真是听了好多这样的话,让我想起之前刷到的一个视频: 我长大要开飞机,我想当宇航员,我要有所…

别光骂谷歌了!新版 Bing 花式“翻车”,还让用户向它道歉?

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 因为 ChatGPT,最近谷歌被“黑”得挺惨:先是它发布的 ChatGPT 竞品 Bard 全球首秀“大翻车”,导致谷歌市值一夜狂跌 7000 亿;接着又被自家员工嘲讽&…

4大主流小程序平台介绍及其优缺点对比

文章目录 人工智能福利文章微信小程序优点缺点 支付宝小程序优点缺点: 百度小程序优点缺点 字节小程序优点缺点 总结写在最后 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你…

【项目实战】SpringBoot+vue+iview打造一个极简个人博客系统

极简个人博客 基于SpringBootvueiview极简个人博客 📚项目介绍 个人极简博客 【个人极简博客】是一个适用于初学者学习的博客系统,其中包含文章分类、写文章、标签管理、用户管理等基础功能,代码简洁注释完善,易上手学习。技术栈…

【从零开始】Docker Desktop:听说你小子要玩我

前言 🍊缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重,高强度的搬砖导致摸鱼时间下降。在上线项目时,看到运维大神一系列骚操作,dockerk8s的知识如过眼云烟,忘得干净的很。所以想重新恶补一下docker知识&…

云炬Android开发教程 Android studio的详细安装步骤

下面我们正式开始安装AS 一、基本的安装教程 下载好后双击运行安装包,点击下一步 - 勾选如图所示勾选选项,点击下一步- 自定义软件的安装路径,点击下一步- 开始运行Android studio,点击finish- 选择第二个,不导入已有…

【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

避坑宝 v1.0.0 基于SpringBootuniapp企业黑红名单吐槽小程序 📚项目介绍 避坑宝 【避坑宝】企业黑红名单吐槽小程序是一个具有吐槽发布企业信息的一个平台,言论自由,评判自定,便于我们打工人分辨企业好坏。技术栈基于SpringBoot…

社群运营怎么做,有哪些互动玩法?

相信不少做社群运营的朋友都有过这样的烦恼:社群成员不活跃,群里每天毫无动静,成员发言不积极、大部分人入群就潜水等问题。建群初期没有经验,用户领完福利就潜水,好好的社群变成了死群。 作为运营者,我们…

(202302)统计学习方法习题实战TASK2 感知机

TASK2: 第二章 感知机 本次参加的是DataWhale组织的2023年2月份学习计划。学习内容为李航老师的《统计学习方法(第二版)》的第一到六章。习题的解答开源在datawhale的GitHub账号GitHub - datawhalechina/statistical-learning-method-solutio…

谈谈会话管理

客户端和服务器之间进行数据传输遵循的是HTTP协议, 此协议属于无状态协议(一次请求对应一次响应, 响应完之后断开连接), 服务器是无法跟踪客户端的请求, 通过cookie技术可以给客户端添加一个标识, 客户端之后发出的每次请求都会带着这个标识从而让服务器识别此客户端, 但由于co…

基于任务型对话的医疗诊断 Task-oriented Dialogue System for Automatic Diagnosis

这项基于任务型对话的自动医疗诊断工作来自复旦大学黄萱菁团队,发表在ACL Short 2018(Task-oriented Dialogue System for Automatic Diagnosis)。初步看该工作和NIPS RL workshop 2016上的神经症状检查器的工作思路是相似的,将AI…

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础》提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/signalr/overview/getting-started…

论文阅读报告:A Neural Approach to Pun Generation

论文阅读报告:A Neural Approach to Pun Generation 这篇报告是课上老师留下的作业,要求我们读一读论文找找感觉,顺便把论文的内容写一写,也算是我第一次认真完整地精读了一篇论文。由于水平有限,翻译理解的内容有拙劣…

【论文阅读】HRNetV2论文笔记

Titile: High-Resolution Representations for Labeling Pixels and Regions 论文地址:https://arxiv.org/pdf/1904.04514.pdf 代码地址:https://github.com/HRNet/HRNet-Object-Detection 1. 概 述 1. 概述 1.概述 基于深度学习的特征表示在计算机视觉…

表情识别综述论文《Deep Facial Expression Recognition: A Survey》中文翻译

本篇博客为论文《Deep Facial Expression Recognition: A Survey》的中文翻译,如有翻译错误请见谅,同时希望您能为我提出改正建议,谢谢! 论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9039…

【论文阅读002】Generating Natural Language Adversarial Examples through ProbabilityWeightedWord Saliency

论文地址:Generating Natural Language Adversarial Examples through Probability Weighted Word Saliency - ACL Anthology,发表于第57届计算语言学协会年会论文集(2019年7月28日至8月2日)的第1085-1097页。 目录 论文主要工作 已有的工作 创新性 …

【论文笔记】Generating Natural Adversarial Examples

Generating Natural Adversarial Examples. Zhengli Zhao, Dheeru Dua, Sameer Singh. ICLR 2018. decision[pdf][code] 文章目录 贡献框架解释样本实验结论 贡献 框架 解释样本 举例说明(使用算法1) 实验 结论 要点: 引入 i n v e r …