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

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

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

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

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

publicclassMainActivityextendsActivity{
privateTextViewtextView;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("--Main--","onCreate");
textView=(TextView)findViewById(R.id.tv_id);
}


@Override
publicvoidonConfigurationChanged(ConfigurationnewConfig){
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"始终以横屏显示

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

privateOnClickListeneronClick=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//设置屏幕为横屏
if(v==butLandscrpe){
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//设置为置屏幕为竖屏
}else{
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
};

//监听系统设置的更改
@Override
publicvoidonConfigurationChanged(ConfigurationnewConfig){
super.onConfigurationChanged(newConfig);
Stringmessage=newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE?"屏幕设置为:横屏":"屏幕设置为:竖屏";
showToast(message);
}


更多相关文章

  1. Android横竖屏切换小结
  2. Android技术篇-了解Android的屏幕适配
  3. Android横竖屏切换
  4. android 拍照 onCreate() 调用两次的问题
  5. Android横竖屏切换小结
  6. android activity之间平滑切换
  7. android 语言切换过程分析
  8. Android(安卓)下控件位置大小调整
  9. android Standard Broadcast Actions 的对比和锁屏前后的测试

随机推荐

  1. Android——界面布局
  2. Android异步消息机制
  3. Android(安卓)Studio 查看不到SDK源码解
  4. Android: Service中创建窗口Dialog
  5. android快速集成高德地图
  6. 2010-02-27 传智播客—Android(二)数据存储
  7. 从Android发展看Meego
  8. Android中要让一个程序的界面始终保持一
  9. Android(安卓)4.0 Launcher2源码分析——
  10. Android推送通知指南