http://blog.csdn.net/xiaodongvtion/article/details/679938 转载自该文章。

注意:onConfigurationChanged事件并不是只有屏幕方向改变才可以触发,其他的一些系统设置改变也可以触发,比如打开或者隐藏键盘。

当我们的屏幕方向发生改变时,就可以触发onConfigurationChanged事件。我们要想当前的activity捕获这个事件,需要做以下这么几件事情。

第一:权限声明:

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>

API中说该权限允许我们改变配置信息,但是我们再改变屏幕方向的程序中却并没有用到该权限,是不是相互冲突了呢?这里我们可以这样认为,当我们声明该权限的的时候,系统允许我们通过重写activity中的onConfigurationChanged方法来捕获和修改某些配置信息。

第二:声明activity要捕获的事件类型,

<activity
      Android:name=".EX05_23"
      Android:label="@string/app_name"
      Android:configChanges="orientation|keyboard">
      <intent-filter>
        <action Android:name="android.intent.action.MAIN" />
        <category Android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

这里一定要声明Android:configChanges属性,该属性规定了我们可以在程序中捕获到的事件类型,多个事件类型用|分隔。

如果这里没有orientation,那么我们再程序中是无法捕获到屏幕改变的事件的。

第三:

重写Activity中的onConfigurationChanged方法。

例如:

@Override
 public void onConfigurationChanged(Configuration newConfig) {
  // 当新设置中,屏幕布局模式为横排时
  if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
  {
   //TODO 某些操作 
  }
  super.onConfigurationChanged(newConfig);
 }

防止再次调用onCreate,首先,需要设置android:configChanges,可选属性如下:

Value Description
“mcc“ The IMSI mobile country code (MCC) has changed — that is, a SIM hasbeen detected and updated the MCC.移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
“mnc“ The IMSI mobile network code (MNC) has changed — that is, a SIM hasbeen detected and updated the MNC.移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
“locale“ The locale has changed — for example, 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 slid the keyboard out to expose it.用户打开手机硬件键盘
“navigation“ The navigation type has changed. (This should never normally happen.)
“orientation“ The screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。
“fontScale“ The font scaling factor has changed — that is, the user has selected a new global font size.全局字体大小缩放发生改变

这里关于屏幕旋转不需要再次调用onCreate是应该设置 android:configChanges="orientation|keyboardHidden"
然后重载onConfigurationChanged

以下自己收集的整理:

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){

//横向

setContentView(R.layout.file_list_landscape);

}else{

//竖向

setContentView(R.layout.file_list);

}

但是,自从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样会重新调用各个生命周期的。

因为screen size也开始跟着设备的横竖切换而改变。

所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation"

你还必须设置"ScreenSize"。

解决方法:

AndroidManifest.xml中设置android:configChanges="orientation|screenSize“

禁止横竖屏切换

android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity 再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了

在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入 android:screenOrientation=”landscape”属性即可(landscape是横向,portrait是纵向)。

onConfigurationChanged相关推荐

  1. Android onConfigurationChanged 收不到回调

    我返现,90度横屏 旋转到270度横屏onConfigurationChanged 是收不到回掉的.尽管清单里面声明了什么: android:configChanges="orientati ...

  2. 安卓application生命周期的onCreate、onLowMemory、onTrimMemory、onConfigurationChanged

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓测试Application生命周期: application类为应用程序的创建和终止.低可用内存和配置改变提供了事件处理程序(如前面部分所述). ...

  3. Intent.createChooser方法在HTC OneX上意外会引发onConfigurationChanged方法

    android就是这点不好,机型太多,什么奇怪的Bug都有.今天又遇上一个,是说在A界面编辑本地联系人返回后会返回到B界面(B界面为默认界面).A和B界面都受一个父Acitivy管理,类似像Tab页一 ...

  4. android 12 framework开发第53节-Activity的reLaunch及onConfigurationChanged android源码分析

    hi,同学们大家好! 1.Configuration应用开发背景 今天要给大家分享内容就是我们应用开发时候经常会遇到问题,那就是如果系统一些属性变化了,比如语言,横竖屏幕,深色模式等.就会导致系统当前 ...

  5. Activity的知识

       什么是 Activity? 通俗一点说 Activity 就是一个界面,这个界面里面可以放置各种控件.Activity 的界面也是 用 xml 文件表示的,放置在 res->layout ...

  6. RelativeLayout(相对布局)的分析

    相对布局是按照组件之间的相对位置来经行布局, 例如某个组件在另一个组件的上,下,左,右边. 语法格式: <RelativeLayout xmlns:android="http://sc ...

  7. Android ActionBarDrawerToggle、DrawerLayout、ActionBar 结合

    ActionBarDrawerToggle是一个开关.用于打开/关闭DrawerLayout抽屉 ActionBarDrawerToggle 提供了一个方便的方式来配合DrawerLayout和Act ...

  8. Android采用Application总结一下

    什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...

  9. [转]Android横竖屏切换解决方案

    本文转自:http://www.cnblogs.com/domybest/archive/2011/06/30/2094779.html 首先在Mainifest.xml的Activity元素中加入a ...

最新文章

  1. 2021年大数据Hadoop(三十):Hadoop3.x的介绍
  2. 手把手教你搭建 ELK 实时日志分析平台
  3. 第一年的要求 工程系的研究生
  4. CAP 原则与 BASE 理论
  5. OC基础--block
  6. http中长连接与短连接的区别,和实现方式。
  7. 微信小程序使用百度地图的Api
  8. 正态分布随机数产生方法
  9. 用python画星空-用Python画一个超级月亮
  10. 前端程序员应该去哪个城市发展?
  11. 漫谈图像超分辨率技术
  12. 无盘服务器磁盘缓存,网众无盘教程 教你挂盘设置缓存
  13. 定时清理服务器日志文件
  14. iOS编译cURL库并链接darwinssl,zlib,c-ares库操作步骤
  15. Windows系统中如何将C盘划分为多个盘符的详细图文教程
  16. Centos 安装docker后 deamo 无法启动的问题 解决
  17. object-c 基础动画的学习总结
  18. 计算机网络一到六章知识点
  19. 暑期实习vs日常实习,它们究竟有什么区别?
  20. 幸运数字 HackerRank - leonardo-and-lucky-numbers

热门文章

  1. You may need an additional loader to handle the result of these loaders
  2. 【学习】如何制作手机端html模板(REM的实际应用)
  3. 海底捞市值超大多数上市房企,火锅是怎么做到比卖房还赚钱的?
  4. 前端开发的发展方向都有哪些?职业方向定位?
  5. 聂文涛谈糖尿病并发症的成因
  6. 中级育婴师证怎么考,需要些什么条件
  7. 谷歌的语音识别利器,最先造福了自己的员工
  8. USB device USB controller USB passthrough
  9. ES MQ canal同步mysql
  10. oracle 12c ins 13001,安装Oracle 12c Release 2报错:INS-13001