本文实例总结了Android实现屏幕旋转方法。分享给大家供大家参考。具体如下:

在介绍之前,我们需要先了解默认情况下android屏幕旋转的机制:

默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则表现为卡顿或者黑屏一段时间。如果是在横竖屏UI设计方面,那么想很好地支持屏幕旋转,则建议在res中建立layout-land和layout-port两个文件夹,把横屏和竖屏的布局文件分别放入对应的layout文件夹中。

了解了这些以后,我们对android的屏幕旋转方法进行如下总结:

1. AndroidManifest.xml设置

如果单单想设置横屏或者竖屏,那么只需要添加横竖屏代码:

?
1
2
android:screenOrientation= "landscape" 横屏设置;
android:screenOrientation= "portrait" 竖屏设置;

这种方法的优点:即使屏幕旋转,Activity也不会重新onCreate。

缺点:屏幕只有一个方向。

2. 代码动态设置

如果你需要动态改变横竖屏设置,那么,只需要在代码中调用setRequestedOrientation()函数:

?
1
2
3
4
5
6
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//横屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//竖屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
//默认设置

这种方法优点:可以随意动态设置,满足我们人为改变横竖屏的要求,同时满足横竖屏UI不同的设计需求;

缺点:如果改变设置,那么,Activity会被销毁,重新构建,即重新onCreate;

3. 重写onConfigurationChanged

如果你不希望旋转屏幕的时候Activity被不断的onCreate(这种情况往往会造成屏幕切换时的卡顿),那么,可以使用此方法:

首先,在AndroidMainfest.xml中添加configChanges:

?
1
2
3
< activity android:name = ".Test"
  android:configChanges = "orientation|keyboard" >
</ activity >

注意,keyboardHidden表示键盘辅助功能隐藏,如果你的开发API等级等于或高于13,还需要设置screenSize,因为screenSize会在屏幕旋转时改变;

?
1
android:configChanges="keyboardHidden|orientation|screenSize"

然后,在Activity中重写onConfigurationChanged方法,这个方法将会在屏幕旋转变化时,进行监听处理:

?
1
2
3
4
5
6
7
8
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);
if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
// Nothing need to be done here
} else {
// Nothing need to be done here
  }
}

这个方法的优点:我们可以随时监听屏幕旋转变化,并对应做出相应的操作;
缺点:它只能一次旋转90度,如果一下子旋转180度,onConfigurationChanged函数不会被调用。

4. 结合OrientationEventListener,自定义旋转监听设置

如果你想更加完美,更加完全的掌控监听屏幕旋转变化,比如,转屏时不想重新onCreate,尤其是在Camera界面,不想出现旋转preview时屏幕的卡顿、黑屏等问题,那么,可以尝试:
 
首先,创建OrientationEventListener对象:

?
1
2
3
4
private OrientationEventListener mOrientationListener;
// screen orientation listener
private boolean mScreenProtrait = true ;
private boolean mCurrentOrient = false ;

然后,自定义屏幕变化回调接口

?
1
2
abstract protected void OrientationChanged( int orientation);
//screen orientation change event

最后,自定义监听类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private final void startOrientationChangeListener() {
  mOrientationListener = new OrientationEventListener( this ) {
  @Override
  public void onOrientationChanged( int rotation) {
  if (((rotation >= 0 ) && (rotation <= 45 )) || (rotation >= 315 )||((rotation>= 135 )&&(rotation<= 225 ))) { //portrait
  mCurrentOrient = true ;
  if (mCurrentOrient!=mScreenProtrait)
  {
  mScreenProtrait = mCurrentOrient;
  OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  Log.d(TAG, "Screen orientation changed from Landscape to Portrait!" );
  }
  }
  else if (((rotation > 45 ) && (rotation < 135 ))||((rotation> 225 )&&(rotation< 315 ))) { //landscape
  mCurrentOrient = false ;
  if (mCurrentOrient!=mScreenProtrait)
  {
  mScreenProtrait = mCurrentOrient;
  OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  Log.d(TAG, "Screen orientation changed from Portrait to Landscape!" );
  }
  }
  }
  };
  mOrientationListener.enable();
}

在onCreate()中调用:

?
1
startOrientationChangeListener();

这个方法的优点:你可以任意随时准确的监听屏幕旋转变化的状态,可以随时动态改变横竖屏状态;

注:对于Camera来说,你可以设置初始化为横屏或者竖屏,然后对外提供旋转监听,这样,既可以获得屏幕旋转状态,让你做出相应的操作,又不会出现重新onCreate当前Activity造成的卡顿与短暂的黑屏切换。

希望本文所述对大家的Android程序设计有所帮助。

Android实现屏幕旋转方法相关推荐

  1. Android 禁止屏幕旋转 旋转屏幕时保持Activity内容

    Android 禁止屏幕旋转 & 旋转屏幕时保持Activity内容 1.在应用中固定屏幕方向. 在AndroidManifest.xml的activity中加入:            an ...

  2. android 屏幕旋转流程,android自动屏幕旋转流程分析.doc

    android自动屏幕旋转流程分析.doc android自动屏幕旋转流程分析 在android设置(Settings)中我们可以看到显示(display)下有一个自动屏幕旋转的checkbox, 如 ...

  3. Android App屏幕旋转要点

    文章目录 前言 屏幕旋转"预热" android:screenOrientation android:configChanges Acitvity onConfigurationC ...

  4. Android处理屏幕旋转时的解决方案

    Android的Activity在不明确的指定屏幕方向和configChanges,当用户进行屏幕旋转时,Activity就会重新启动,这个时候需要考虑的就是数据的保存与恢复,Android给出了一下 ...

  5. Android监测屏幕旋转

    监测屏幕旋转的方案,这里简要说一下screenOrientation,OrientationEventListener,SensorEventListener. 方案一 screenOrientati ...

  6. android 手机屏幕旋转机制与使用说明

    android 屏幕旋转机制与使用说明 一 Overview 在开发android应用的时候,有可能需要让应用程序随着系统设置而进行调整,比如判断系统的屏幕方向.判断系统方向的方向导航设备等.除此之外 ...

  7. Android 打开屏幕旋转

    2019独角兽企业重金招聘Python工程师标准>>> 添加设置读写权限: <uses-permission android:name="android.permis ...

  8. Android之屏幕旋转之后当前activity被finish了依然被拉起来

    1 问题 屏幕旋转之后当前activity被finish了依然被拉起来 2 分析思路 不用finish函数,使用 android.os.Process.killProcess(android.os.P ...

  9. Android 禁止屏幕旋转

    Android 开发中禁止屏幕旋转 我们通常有两种方案 方案一 在AndroidManifest.xml 中设置activity 中的android:screenOrientation 属性值 方案二 ...

最新文章

  1. 关于 SAP ABAP gateway OData 的一个诡异问题及解决办法
  2. pythondevp2p_以太坊GO、JAVA、PYTHON、RUBY、JS客户端介绍
  3. XenDesktop 5 SQL Server Mirror事务日志比较大的原因分析
  4. android n 支持机型,Android N无缝更新功能不适于现有机型
  5. 新松机器人刻蚀机_中国最大机器人产业基地新松智慧园在沈阳启用
  6. 机器学习笔记(三十):基尼系数、CART
  7. ssd变频器说明书_变频器说明书大全
  8. 手机号正则和邮箱正则,常用正则解释
  9. 头条 上传图片大小_遇到不会注册今日头条号,这么办?
  10. 一次完整的渗透测试流程
  11. AVD安装XPOSED环境
  12. 密码学七:MD5算法
  13. 使用lux(annie)下载视频
  14. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用
  15. fgets和fputs的使用
  16. 成人大专计算机应用技术专业难毕业吗,深圳成人大专哪个专业容易毕业
  17. 动态页面静态化之页面静态化方案
  18. python清除变量方法
  19. [Jquery]天气接口简单使用
  20. 2014年终总结-暖冬

热门文章

  1. 蓝桥杯真题:第几个幸运数字
  2. 游戏鼠标 测试软件,测试键盘鼠标辐射的专业工具_策略游戏(游戏软件)_键鼠导购-中关村在线...
  3. [前端项目学习笔记] 200行代码网站首页轮播实现(html,css,js)
  4. 第二次作业--------STEAM
  5. 树莓派安装HomeAssistant Docker方式
  6. 浅谈三极管放大器失真
  7. CloudVM 之 域名绑定服务器
  8. 币圈“重启”?大佬回归,矿机脱销,资金盘蠢蠢欲动……
  9. 想要成为一名合格的软件测试工程师,你得会些啥?
  10. 微信企业号会议助手---后端ssm架构搭建