购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2.3 屏幕方向与设备配置改变

对于可移动设备(手机、平板计算机等)来讲,用户可以根据实际的应用场景改变设备屏幕的方向。例如,当用户准备用手机看电影时,查找、浏览电影的信息通常使用纵向的屏幕方向,而观看电影时通常使用横向的屏幕方向。这时就需要通过代码控制屏幕的方向了。

1.通过代码改变屏幕方向

通过setDisplayOrientation(DisplayOrientation orientaion)方法即可改变屏幕的方向,代码如下:

2.固定屏幕方向

永久性地固定Page的屏幕方向非常简单,只需要在config.json中配置Page的orientation属性为landscape(横向显示)或portrait(纵向显示),但是,很多情况下,一个Page并不是在所有的情况下都需要保持一个方向。例如,播放视频时在未锁定屏幕的情况下可以改变屏幕方向,在锁定屏幕的情况下固定屏幕方向,那么在config.json中配置固定屏幕方向就不合适了。这种需求可以采用复写setDisplayOrientation(DisplayOrientation orientaion)方法实现,代码如下:

当isOrientationFixed变量为false时,屏幕方向可以随意改变;但是当isOrientationFixed变量为true时,屏幕方向将被固定为纵向。

3.屏幕方向变化时的设备配置改变

屏幕方向变化时会引起设备配置的改变(Device Config Change),而设备配置的改变会引起Page的重建。设备配置包括屏幕密度、屏幕方向、屏幕尺寸、语言区域、字体显示大小等。显然,屏幕密度和屏幕尺寸在运行时几乎不会被改变,但是屏幕方向、语言区域等设备配置在运行时是可以被改变的。

设备配置改变后,当前Page就无法适应新的设备配置了,因此,在默认情况下应用程序可以将Page销毁并重建。这种方法显然最为简单,但是问题也最大:当前Page展示的数据和状态信息也通通被销毁了。

接下来用实例向大家解释一下。

在3.2.1节中的Lifecycle应用程序中,修改config.json中module对象下的deviceType,加入phone类型,使其支持手机设备,便于测试屏幕方向变化,代码如下:

在手机设备上运行应用程序,然后改变屏幕方向,此时在HiLog工具窗体中提示以下信息:

可以发现,在屏幕方向改变的过程中,MainAbility被销毁后重建了。

那么,如果开发者希望在屏幕方向改变后保留当前的Page数据和状态该怎么办呢?有两种方法:

· 不销毁重建Page。

· 销毁Page时保留临时数据,重建Page时读取临时数据。

接下来分别介绍这两种方法的实现方式:

1)不销毁重建Page

这种方法其实很简单,只需要在config.json中在当前的Ability的配置选项加入configChanges属性,并在其数组中加入orientation,代码如下:

重新运行程序,旋转设备并观察HiLog工具窗体,可以看出MainAbility不会被销毁后重建了。

2)销毁Page时保留临时数据,重建Page时读取临时数据

在Ability中,通过重写onStoreDataWhenConfigChange()方法存储临时数据,代码如下:

在Ability或AbilitySlice中,通过getLastStoredDataWhenConfigChanged()方法读取临时数据,代码如下: uq6ExT+OBbID561IU8EfWqdf4cCX8WwiwMhN/UbzPgd5oerlMq51y8MkGJ1gHf4T

点击中间区域
呼出菜单
上一章
目录
下一章
×