android:screenOrientation常用的属性值:

unspecified,默认值,由系统决定,不同手机可能不一致
landscape,强制横屏显示
portrait,强制竖屏显示
behind,与前一个activity方向相同
sensor,根据物理传感器方向转动,用户90度、180度、270度旋转手机方向,activity都更着变化
sensorLandscape,横屏旋转,一般横屏游戏会这样设置
sensorPortrait,竖屏旋转
nosensor,旋转设备时候,界面不会跟着旋转。初始化界面方向由系统控制
user,用户当前设置的方向
fullSensor 显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入
fulluser 如果用户锁定了基于传感器的旋转,其行为与 user 相同,否则,其行为与 fullSensor 相同,允许所有 4 种可能的屏幕方向。 API 级别 18 中的新增配置。
locked 将方向锁定在其当前的任意旋转方向。API 级别 18 中的新增配置。

配置方法一:

<activity

android:name=“xxx”
android:configChanges=“orientation|screenSize|keyboardHidden”
android:screenOrientation=“portrait”

/>

配置方法二:

在java代码中使用。
/**

  • 设置当前屏幕方向为横屏
    */
    private void setHorizontalScreen(Activity activity) {
    if (activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    }

/**

  • 设置当前屏幕方向为竖屏
    */
    private void setVerticalScreen(Activity activity) {
    if (activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
    }

android:configChanges常用的属性

正常横竖屏切换的生命周期:
onPause()->onSaveInstanceState()-> onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState->onResume()

如何避免切屏时从新调用各个生命周期。

所以当屏幕发生旋转的时候,activity会重走生命周期,但是如果不希望重走生命周期,那么可以设置android:configChanges=”orientation|screenSize|keyboardHidden”,这样当屏幕发生旋转的时候便是回调onConfigurationChanged()函数。
有需要可以后面加上下面的属性
android:configChanges=”orientation|screenSize|keyboardHidden|mcc|mnc|等

mcc:The IMSI mobile country code (MCC) has changed — a SIM has been detected and updated the MCC.
IMSI(国际移动用户识别码)发生改变,检测到SIM卡,或者更新MCC
mnc:The IMSI mobile network code (MNC) has changed — a SIM has been detected and updated the MNC.
IMSI网络发生改变,检测到SIM卡,或者更新MCC
其中mcc和mnc理论上不可能发生变化
locale:The locale has changed — the user has selected a new language that text should be displayed in.
语言发生改变,用户选择了一个新的语言,文字应该重新显示
touchscreen:The touchscreen has changed. (This should never normally happen.)
触摸屏发生改变,这通常是不应该发生的
keyboard:The keyboard type has changed — for example, the user has plugged in an external keyboard.
键盘类型发生改变,例如,用户使用了外部键盘
keyboardHidden:The keyboard accessibility has changed — for example, the user has revealed the hardware keyboard.
键盘发生改变,例如,用户使用了硬件键盘
navigation:The navigation type (trackball/dpad) has changed. (This should never normally happen.)
导航发生改变,(这通常不应该发生) 举例:连接蓝牙键盘,连接后确实导致了navigation的类型发生变化。因为连接蓝牙键盘后,我可以使用方向键来navigate了
screenLayout:The screen layout has changed — this might be caused by a different display being activated.
屏幕的布局发生改变,这可能导致激活不同的显示
fontScale:The font scaling factor has changed — the user has selected a new global font size.
全局字体大小缩放发生改变
orientation:The screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。
screenSize: 屏幕大小改变了
smallestScreenSize: 屏幕的物理大小改变了,如:连接到一个外部的屏幕上
layoutDirection:layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。
需要在android:configChanges 中同时添加locale和layoutDirection。
在不退出应用的情况下切换到Settings里切换语言,发现该Activity还是重启了。

横竖屏切换不同的布局

如果想要横竖屏是不同的布局,可以通过以下两种方法来切换布局:
(1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。
(2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新加载当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头开始),你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout 。

/** 1:竖屏   2:横屏 判断屏幕以旋转的方向 */private int orientation;
orientation=getResources().getConfiguration().orientation;

参考连接:
https://blog.csdn.net/lixiaoliang0723/article/details/105220692/ https://blog.csdn.net/haoxuhong/article/details/80106674
https://blog.csdn.net/kongbaidepao/article/details/73381373

Android 自动旋转屏幕总结相关推荐

  1. android设置自动旋转屏幕,android怎样实现关闭系统自动旋转屏幕时能够自动横竖屏...

    android 系统关闭系统自动旋转屏幕情况下利用设备感应器(方向传感器)实现横竖屏切换 2.SensorManager sm=(SensorManager)getSystemService(SENS ...

  2. 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向

    http://www.xuanyusong.com/archives/2871 如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求 ...

  3. Android Activity旋转屏幕横屏实现全屏方法

    activity在竖屏的时候,顶部会有状态栏,顶部会有ToolBar,现在需求是,旋转屏幕以后,横屏状态下 整个界面是以全屏状态显示,隐藏ToolBar,不显示屏幕最顶部的状态栏 首先,在Androi ...

  4. android 屏幕旋转不重新加载,Android webview旋转屏幕导致页面重新加载问题解决办法...

    Android webview旋转屏幕导致页面重新加载问题解决办法 1. 在create时候加个状态判断 protected void onCreate(Bundle savedInstanceSta ...

  5. iOS手动旋转屏幕、自动旋转屏幕

    有的时候,在iOS下需要实现手动旋转屏幕与自动旋转屏幕的自由切换.比如,在手机竖屏时希望点击按钮使页面横屏,然后当手机屏幕方向发生变化时,页面能正常的契合手机旋转的方向. 1.视图方向旋转:通过vie ...

  6. iOS手动和自动旋转屏幕

    1.手动旋转屏幕函数 - (void)setOrientation: (UIInterfaceOrientation)orientation {if([[UIDevice currentDevice] ...

  7. linux屏幕旋转后触控不准,手机重力感应失效解决方法 不能自动旋转屏幕怎么设置...

    如今手机已经成为人们生活中必不可少的一个工具了,在使用过程也常常会遇到各种各样的问题,比如当手机重力感应失效的时候应该怎么解决呢,手机不能自动旋转屏幕要怎么设置,针对这个问题下面就为大家带来最新解决方 ...

  8. android自动旋转导致页面异常跳转

    开发的app出现了登录后屏幕旋转时,自动跳转到登录页面了,网上查找后最后做一总结. 原因是android中每次屏幕的切换动会重启Activity,导致每次都会跳转到登录页. AndroidManife ...

  9. 重力感应失灵/更新win10后不能自动旋转屏幕

    问题 重力感应失灵了,屏幕不能自动旋转.看设备管理器里,传感器下bosch accelerometer图标上有个黄色叹号,更新驱动软件说已是最新版本,可依然无法解决问题. 解决 删除设备,勾上下面那个 ...

  10. Unity3D自动旋转屏幕

    U3D打包的时候默认为任意方向旋转,但实际开发中,我们只需要左右或者上下旋转. 实际上这些值是可以配置的,配置代码如下: //自动旋转横屏:bool值代表是否开启Screen.orientation ...

最新文章

  1. IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【中】...
  2. 聚类小分子数据集(基于RDKit的Python脚本)
  3. 变量、中文-「译」javascript 的 12 个怪癖(quirks)-by小雨
  4. 设计模式复习-桥接模式
  5. 并发容器之CopyOnWriteArrayList
  6. 单片机的Bootloader,可以实现用户轻松升级程序
  7. CKEditor 5 v17.0.0 发布,新增表格样式和特殊字符支持
  8. 《C#高级编程(第六版)》泛型学习笔记(一):泛型优点和特性 (转载)
  9. 一个字同时设置了粗体斜体,哪个先生效?
  10. 基于FPGA的中值滤波器设计
  11. spss数据分析_排序数据_计算变量
  12. [附源码]计算机毕业设计JAVAJAVA大方汽车租赁管理系统
  13. 【影音工具集合】本文记录了影音工作者常用的好用的工具软件(持续更新中)
  14. 基于 DirectShow 实现 SourceFilter 常见问题分析
  15. ubuntu下打开nsg2的命令
  16. Redis爬坑记(一):incr命令和expire命令的误区
  17. 网络安全劳动力发展报告
  18. 如何提升管理能力与管理水平?
  19. echarts折线风向图(附源码,可直接使用)
  20. MySQL主键(primary key)的作用

热门文章

  1. Java读取星历excel数据并计算卫星坐标
  2. bin code led_一种led颜色BIN划分方法与流程
  3. 计算机显示器的标准是什么,电脑显示器的标准相位是多少啊
  4. python PyEnchant(检查拼写)
  5. 几个大的车载开源平台
  6. 阿里巴巴Java开发手册终极版v1.3.0(百度网盘资源)
  7. 『天涯杂谈』衣食住行小窍门
  8. SVG霍比特人电影标题样式
  9. 计算机毕业设计 志愿者服务管理系统 志愿者系统 志愿者招募系统 志愿者报名管理系统 志愿者信息管理系统 志愿者管理系统 志愿者管理系统源码 志愿者管理系统java 志愿者信息管理系统
  10. 核磁计算机系统包括,核磁共振和CAT扫描系统