Android 监听横竖屏切换
重写 Activity 中的 onConfigurationChanged 方法

override fun onConfigurationChanged(newConfig: Configuration) {super.onConfigurationChanged(newConfig)if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {//横屏} else {//竖屏}}

如果想让 Activity 在切换横竖屏是不重新创建则需要在 AndroidManifest.xml 加上如下属性:

 android:configChanges="orientation|keyboardHidden|screenSize">

如下:

 <activityandroid:name=".TestActivity"android:configChanges="orientation|keyboardHidden|screenSize"/>

android:configChanges 属性及作用:

属性 作用
mcc SIM卡唯一标识IMSI(国际移动用户标识码)中的国家代码,由三位数字组成,中国为:460 这里标识mcc代码发生了改变
mnc SIM卡唯一标识IMSI(国际移动用户标识码)中的运营商代码,有两位数字组成,中国移动TD系统为00,中国联通为01,电信为03,此项标识mnc发生了改变
locale 设备的本地位置发生了改变,一般指的是切换了系统语言
touchscreen 触摸屏发生了改变
keyboard 键盘类型发生了改变,比如用户使用了外接键盘
keyboardHidden 键盘的可访问性发生了改变,比如用户调出了键盘
navigation 系统导航方式发生了改变
screenLayout 屏幕布局发生了改变,很可能是用户激活了另外一个显示设备
fontScale 系统字体缩放比例发生了改变,比如用户选择了个新的字号
uiMode 用户界面模式发生了改变,比如开启夜间模式-API8新添加
orientation 屏幕方向发生改变,比如旋转了手机屏幕
screenSize 当屏幕尺寸信息发生改变(当编译选项中的minSdkVersion和targeSdkVersion均低于13时不会导致Activity重启)-API13新添加
smallestScreenSize 设备的物理屏幕尺寸发生改变,这个和屏幕方向没关系,比如切换到外部显示设备-API13新添加
layoutDirection 当布局方向发生改变的时候,正常情况下无法修改布局的layoutDirection的属性-API17新添加

如果自己没有配置android:ConfigChanges,这时默认让系统处理,就会重建Activity,此时Activity的生命周期会走一遍。
如果自己handle了,系统就不处理了,Activity不会重建,只会回调onConfigurationChanged方法。
如果不想横屏时activity自动重启, 可以在AndroidManifest文件的中声明android:configChanges属性, 当指定的系统配置发生改变的时候, 系统将不会重启activity, 而是执行程序中的public void onConfigurationChanged(Configuration newConfig)函数, 这样就可以让我们自己处理横屏这件事.

如果想固定屏幕方向为竖屏 则 添加 android:screenOrientation 属性值为:portrait -竖屏(android:screenOrientation="portrait"

```c<activityandroid:name=".TestActivity"android:screenOrientation="portrait"android:configChanges="orientation|keyboardHidden|screenSize"/>

android:screenOrientation属性详解

属性 作用
unspecified 默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。
user 使用用户当前首选的方向。
behind 使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
landscape 横向显示(宽度比高度要大)
portrait 纵向显示(高度比宽度要大)
reverseLandscape 与正常的横向方向相反显示,在API Level 9中被引入。
reversePortrait 与正常的纵向方向相反显示,在API Level 9中被引入。
sensorLandscape 横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
sensorPortrait 纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
sensor 显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
fullSensor 显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
nosensor 屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。

通过代码动态设置屏幕方向:

private fun setRequestedOrientations(rotation: Int) { //此时的rotation为传感器旋转的角度if (rotation < 10 || rotation > 350) { // 手机顶部向上requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT} else if (rotation in 81..99) { // 手机右边向上requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE} else if (rotation in 171..189) { // 手机低边向上requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT} else if (rotation in 261..279) { // 手机左边向上requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE}}

Android 监听横竖屏切换相关推荐

  1. Android监听横竖屏切换

    偶然在项目中用到播放视频时,需要横屏将视频全屏播放,所以需要监听屏幕的横竖屏切换事件. ConfigChanges,用于捕获手机状态的改变,当横竖屏切换,屏幕尺寸变化,弹出键盘,系统设置改变等条件,就 ...

  2. android横竖屏切换布局闪退,Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换...

    在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity 系统会杀死Activity 12-12 08:11 ...

  3. android 强制锁屏代码,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

  4. Android开发中横竖屏切换的问题以及系统提供的常用Activity

    Android开发中横竖屏切换的问题以及系统提供的常用Activity(总结) 2018年06月28日 16:18:45 北极熊的微笑 阅读数:72 横竖屏切换与状态保存的问题 前面也也说到了App横 ...

  5. android锁屏代码分析,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

  6. h5 监听 横竖屏 旋转

    h5监听横竖屏旋转: function orientate() {if (global.orientation === 90 || global.orientation === -90) {alert ...

  7. 解决Android手机 屏幕横竖屏切换

    Android中当屏幕横竖屏切换时,Activity的生命周期是重新加载(说明当前的Activity给销毁了,但又重新执行加载),怎么使屏幕横竖屏切换时,当前的Activity不销毁呢? 1. 在An ...

  8. Android应用:横竖屏切换总结

    眨眼间,已经到了2016你年春节前,离上一篇博客的时间已经有6个月多,回想起这半年的种种,不得不说,学习和工作实在是太忙了,或许这就是程序员的真实写照吧. 写博客之初,主要的目的还是为了把自己的学习痕 ...

  9. Android视频播放和横竖屏切换

    最近做了一个项目,里面用到了视频播放这一块,当时想考虑Vitamio,demo也做了出来,但是后来发现它是商业收费的,并且收费相当可观,所以只能放弃了.然后找到了ijkPlayer,功能也很强大,最终 ...

最新文章

  1. 计算机word应用模块三,计算机应用基模块三.ppt
  2. 如何使用Mybatis的拦截器实现数据加密与解密
  3. SAP PP模块调研问卷
  4. 计算机软件侵权责任,对计算机软件侵权行为认定标准
  5. 堆化 二叉堆一般用数组来表示。typedef struct _minHeapNodetypedef struct _otherInfo-icoding-C-数据结构
  6. [css] 你是怎样抽离样式模块的?
  7. linux的grub损坏,如何利用Grub命令启动损坏的Linux系统?
  8. ​​2021快手母婴行业数据价值报告
  9. 只想安安静静地敲完一段代码
  10. linux性能调优干货,【干货分享】详解Linux性能调优之tuned特性
  11. 在github网页版里新建文件夹,放置很多子文件:添加斜杠自动生成文件夹
  12. Java 并发系列之十三:安全发布
  13. 隐瞒英特尔重大安全漏洞惹众怒,苹果遭遇集体诉讼
  14. python读音有道-centos7安装有道词典(不能发音和取词)
  15. Altium Designer 18安装教程
  16. postsql获取表字段信息SQL
  17. 如何在html页面集成markdown编辑器
  18. win7磁盘清理_Win7系统使用久变慢怎么办?Windows7系统优化方法
  19. 习题5.4 找出4*5矩阵中值最小和最大元素,并分别输出其值及所在的行号和列号。
  20. Teams Bot App 代码解析

热门文章

  1. GDAL/OGR/OSR 坐标系ERROR 4: Unable to open EPSG support file gcs.csv osr.SpatialReference()
  2. 金城江区~宜州市 网上地图对比
  3. Burp Suite win10下安装图文教程
  4. win10开机有东西一闪而过_win10系统开机cmd窗口一闪而过的解决方法
  5. 分享一个实现夜间模式的浏览器扩展
  6. Redis 知识点和面试题(持续更新ing)
  7. GUI编程--03--Swing
  8. 基于SeedUbuntu16.04的缓冲区溢出实验
  9. canopen研发记录
  10. Android 开源框架精选