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

1. 在AndroidManifest.xml中为Activity设置configChanges属性,

application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

configChanges有如下选项:  1. orientation :屏幕在纵向和横向间旋转,  2. keyboardHidden:键盘显示或隐藏 ,3.fontScale:用户变更了首选的字体大小   4.locale : 用户选择了不同的语言设定,5.  keyboard :键盘类型变更,例如手机从12键盘切换到全键盘   6. touchscreen或navigation:键盘或导航方式变化,

如果缺少了keyboardHidden选项 不能防止Activity的销毁,并且在之后提到的onConfigurationChanged事件中 只能捕获竖屏变横屏的事件 不能捕获横屏变竖屏
2. 在对应的Activity中重写:onConfigurationChanged 方法:

publicclass MainActivity extends Activity {
private TextView textView;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("--Main--", "onCreate");
textView=(TextView)findViewById(R.id.tv_id);
} @Override
publicvoid onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i("--Main--", "onConfigurationChanged");
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
textView.setText("当前屏幕为横屏");
}else{
textView.setText("当前屏幕为竖屏");
}
} }

布局文件就是一个简单的TextView此处不给出,

效果如下:
                            

日志打印:

从日志中可以分析出屏幕横竖屏切换时Activity并没有销毁,当然你也可以运行项目在onCreate方法打个断点,执行发现onCreate方法只是在刚开始进入时执行,屏幕横竖屏切换时,已经不会在执行,因此可在onConfigurationChanged方法中下点文章!

注:如果项目不需要屏幕切换时可以设置为

1. android:screenOrientation="portrait" 始终以竖屏显示 
2. android:screenOrientation="landscape" 始终以横屏显示

上面的配置文件设置屏幕横竖屏,下面是代码去控制屏幕横竖屏的:

private OnClickListener onClick=new OnClickListener() {
@Override
publicvoid onClick(View v) {
//设置屏幕为横屏if(v==butLandscrpe){
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//设置为置屏幕为竖屏 }else{
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}; //监听系统设置的更改 @Override
publicvoid onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
String message=newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE ?"屏幕设置为:横屏" : "屏幕设置为:竖屏";
showToast(message);
}

  

各位朋友可以去试试,有什么意见或建议欢迎留言,谢谢!

原文地址:

http://www.cnblogs.com/zhangkai281/archive/2011/07/06/2099277.html

最新文章

  1. SQL Server 2012 清理日志 截断日志的方法
  2. C#开发微信门户及应用(28)--微信“摇一摇&#183;周边”功能的使用和接口的实现
  3. Eclipse代码和xml文件的智能提示
  4. iOS-Runtime知识点整理
  5. 13个风格独特的关于页面(About Pages)设计
  6. linux下VMware安装出现的问题解决
  7. 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
  8. PIVOT 用于将列值旋转为列名
  9. linux下多ISP的策略路由
  10. Windows I/O模型、同步/异步、阻塞/非阻塞
  11. JavaSE学习总结第07天_面向对象2
  12. 深入 CSocket 编程之阻塞和非阻塞模式
  13. ProgressMonitorInputStream
  14. zencart 后台目录产品黄色icon_yellow_on.gif 解决方案
  15. Apache反向代理的配置
  16. git回退操作
  17. Windows下强制删除文件或文件夹(解除文件占用/Unlock)
  18. Tomcat安装、配置和部署笔记
  19. 【BZOJ3413】匹配(后缀自动机,线段树合并)
  20. 【Tomcat】Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

热门文章

  1. BAT脚本编写教程
  2. solr配置相关:约束文件及引入ik分词器
  3. C++版修真小说
  4. 297. Serialize and Deserialize Binary Tree二叉树的序列化和反序列化(就用Q)
  5. 563. Binary Tree Tilt 子节点差的绝对值之和
  6. WebSocket 教程(转载)
  7. js失去焦点触发
  8. [Training Video - 6] [File Reading] [Java] Read Excel File Using Apache POI API
  9. SetDns.bat 2014-03-28 20:00:19
  10. MVC错误(一)