Android 屏幕旋转使用

一·Manifest配置

如需实现转屏效果,我们需要在manifest文件中对Activity进行一些属性配置

<activity
      android:name=".TestActivity"
      android:configChanges="orientation|screenSize"
      android:screenOrientation="fullSensor">
</activity>

这里进行了两个属性的配置

1.configChanges

  • Android系统对于Activity的一些行为的改变,比如屏幕旋转、屏幕大小改变等,会进行一些默认处理:正常销毁当前Activity并重新创建一个新的Activity

  • 这些行为可以在manifest中进行配置,取消默认的处理,也就是不会销毁Activity转而通过回调某个方法通知用户,进行自定义处理;所以我们如果不想重建Activity需要配置旋转屏幕相关的行为

  • 旋转屏幕相关的属性如下:

    1. orientation:屏幕方向发生了变化

    2. screenSize:屏幕大小发生了变化,在API13以上,当屏幕旋转后该配置也会变更,所以我们需要加上这个行为(毕竟现在minSdk远远大于13了),否则还是会重建Activity

  • 全部属性可参考官方网站

2.screenOrientation

  • 这个属性是用来指定屏幕方向的,可以指定为具体某个固定的方向,也可以指定变化的方向等

  • 常用的一些属性:

    1. sensor:根据传感器方向决定屏幕的方向,一般来说有四个方向,不过有些设备默认不允许全部四个方向

    2. fullSensor:根据传感器方向,可以使屏幕旋转为任意四个方向,是sensor的补充

    3. portrait:固定垂直方向

    4. landscape:固定水平方向

    5. unspecified:默认值,根据设备选择不同的方向

  • 全部属性可参考官方网站

3.总结

  1. 如果不想重建Activity实现任意方向的旋转,就需要按上述代码块实现配置

  2. 如果不对这两个属性进行配置,系统默认情况下会进行旋转并重建Activity

二.回调方法

实现了屏幕的选择且不重建Activity,为的就是用户可以自己对当前页面做旋转后的处理,于是Activity提供了配置更改的回调方法

override fun onConfigurationChanged(newConfig: Configuration?) {
  super.onConfigurationChanged(newConfig)
  newConfig ?: return
  Log.i(TAG, when (newConfig.orientation) {
    Configuration.ORIENTATION_PORTRAIT -> "纵向"
    else -> "横向"
  })
}
  1. newConfig对象里有最新的屏幕信息,此时通过Resources对象拿到的值也都是应用了新config的值

  2. 此时Activity不会执行销毁的生命周期,而是直接调用该方法

  3. 如果是重建Activity的话,不会走这个方法

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值