旋转屏幕是手机用户的一个日常操作,本文介绍如何在屏幕旋转时自动调整屏幕布局的方法。效果如下:

视频演示

间接处理屏幕旋转

默认情况下用户旋转屏幕时,Harmony应用架构会调用AbilitySlice类的onStart方法,所以原则上讲,只要开发者在onStart中获取屏幕方向并选择适当的画面布局就间接处理了屏幕旋转。

如果稍加调查,可以发现Ability类有一个颇具迷惑性的方法:

public int getDisplayOrientation()

但是很遗憾,这个方法返回的是开发者在config.json中定义的那个orientation,它不会随着屏幕的旋转而改变。


获取屏幕方向需要像下面这样做:​​​​​​​

Configuration config = this.getResourceManager().getConfiguration();if(config.direction == Configuration.DIRECTION_HORIZONTAL){    super.setUIContent(ResourceTable.Layout_ability_main_horz);}else{    super.setUIContent(ResourceTable.Layout_ability_main_vert);}

接下来的事情就容易多了。

直接处理屏幕旋转

另外一个和getDisplayOrientiaon同样具有迷惑性的是Ability和AbilitySlice都有一个屏幕旋转事件处理方法,看起来开发者只要重写这个方法就能接受相应的通知。

void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation)

但是事实是:只是重写这个方法,屏幕旋转时它根本不会被调用。解决这个问题的方法是修改config.json文件并增加红框中的内容:

另外一个事实是:一旦你为Ability的configChanges指定了orientation值,屏幕旋转时Harmony架构就不会再调用onStart方法了。

只能二选一。

参考代码

完整代码可以从以下链接下载:

https://github.com/xueweiguo/Harmony/tree/master/StopWatch

参考资料

Java API参考-Ability (harmonyos.com)

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ability-0000001054120007

配置文件的元素

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-config-file-elements-0000000000034463

作者著作介绍

《实战Python设计模式》是作者去年3月份出版的技术书籍,该书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。


觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

自学HarmonyOS应用开发(64)- 处理屏幕旋转相关推荐

  1. Android开发实践:屏幕旋转的处理

    最近开发Android Camera相关的程序,被屏幕旋转搞得头大,一方面得考虑屏幕旋转后布局的变化,另一方面得搞清楚屏幕的旋转方向.角度与Camera的Preview角度的关系.本来通过重载Acti ...

  2. iOS开发 - 设置应用屏幕旋转方向、禁止横屏

    前言 最近写软件的 UI 发现,屏幕旋转会影响布局的展示,由于开发的周期比较短,来不及做精细的布局适配,所以我决定禁止应用竖屏展示.处理过程如下文所示,希望对他人也有帮助. 操作步骤 1. 设置 De ...

  3. ios 旋转屏幕试图切换_总结iOS App开发中控制屏幕旋转的几种方式

    在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewControlle ...

  4. 自学HarmonyOS应用开发(56)- 用Service保证应用在后台持续运行

    秒表程序的功能当然是计时,但是Harmony应用的默认动作是切到后台之后程序会退出,无法实现连续计时.首先来看效果视频: 视频演示https://v.qq.com/x/page/v3317d5blit ...

  5. iOS开发中禁止屏幕旋转的2种方式

    在AppDelegate.m中添加以下代码: - (UIInterfaceOrientationMask)application:(UIApplication *)application suppor ...

  6. 自学HarmonyOS应用开发(51)- 获取瓦片地图数据(续)

    计算瓦片位置 根据前一篇文章中说明的计算方法,我们提供以下代码实现: //https://wiki.openstreetmap.org/wiki/Slippy_map_tilenamesint get ...

  7. iOS开发—进制屏幕旋转、禁止横屏

    由于一些UI的布局会因为横屏产生变化,这里打算直接禁止横屏 操作步骤 在TARGETS的Deployment Info中设置是否允许旋转与横屏,注意有iPhone与iPad两个选项 亦可在info文件 ...

  8. Android 禁止屏幕旋转

    Android 开发中禁止屏幕旋转 我们通常有两种方案 方案一 在AndroidManifest.xml 中设置activity 中的android:screenOrientation 属性值 方案二 ...

  9. iOS开发中屏幕旋转(二)

    Morris_ 2019.04.11 前面有总结过一些在开发中遇到的屏幕旋转的基础知识. 一.设置应用支持的转屏方向 设置方式 00x1 在TARGET->General->Deploym ...

最新文章

  1. Ubuntu 配置 Android 开发 环境
  2. 2019年东莞特长生 散步
  3. rdd数据存内存 数据量_「大数据」(七十七) Spark之IO机制
  4. Ubuntu 16.04安装 sogou 遗留下的问题
  5. tpch测试mysql_MySQL-tpch 测试工具简要手册
  6. Windows Mobile 数独游戏及全部源码
  7. leetcode探索数组(一)
  8. 制作一个简易的即时聊天工具
  9. 利用BP神经网络求解非线性方程组
  10. Linux进程之如何查看进程详情?
  11. html下拉菜单栏代码
  12. JAVA 实现批量PDF 打印,线程池多线程执行(附完整代码)
  13. phpnow怎么改php版本,phpnow升级php版本的方法
  14. VBS 对IBM Notes的常规操作
  15. php 野生动物公益保护系统
  16. html响应式布局ipad,响应式布局(Responsive design)
  17. 老司机 iOS 周报 #15 | 2018-04-16
  18. 头脑王者_头脑令人困惑
  19. 计算机教师读56 号教室体会,《第56号教室的奇迹》读后感(精选7篇)
  20. 八爪鱼采集百度地图坐标店铺视频教程

热门文章

  1. 当前年的日历存储到数据库,用于判断某一天是假期还是工作日
  2. Android发展历程
  3. 搞定iOS的几种页面跳转方式
  4. 程序员是怎样的一群人
  5. 2022年中国农业现代化发展现状
  6. Ensight导入Fluent h5瞬态序列文件
  7. 攻防世界逆向入门题之open-source
  8. (转)DDD CQRS和Event Sourcing的案例:足球比赛
  9. KDD 2020阿里巴巴论文一分钟秒读
  10. 用Visio画深度学习模型矢量图