旋转屏幕是手机用户的一个日常操作,本文介绍如何在屏幕旋转时自动调整屏幕布局的方法。效果如下:
间接处理屏幕旋转
默认情况下用户旋转屏幕时,Harmony应用架构会调用AbilitySlice类的onStart方法,所以原则上讲,只要开发者在onStart中获取屏幕方向并选择适当的画面布局就间接处理了屏幕旋转。
如果稍加调查,可以发现Ability类有一个颇具迷惑性的方法:
代码语言:javascript复制public int getDisplayOrientation()
但是很遗憾,这个方法返回的是开发者在config.json中定义的那个orientation,它不会随着屏幕的旋转而改变。
获取屏幕方向需要像下面这样做:
代码语言:javascript复制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都有一个屏幕旋转事件处理方法,看起来开发者只要重写这个方法就能接受相应的通知。
代码语言:javascript复制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 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。