Android手机运行时候,一般用户都是竖屏的,但是经常不经意间会旋转手机,这时候程序就会出现异常,以为在选在屏幕时候重新装载了Acitivity,那么如何解决这个问题呢,总结如下三条:
1:
在AndroidManifest.xml中设置Activity的方向属性。
1.1. 固定为竖屏
<activity android:name="MyActivity" android:screenOrientation="portrait"/>
1.2. 固定为横屏
<activity android:name="MyActivity" android:screenOrientation="landscape"/>
2:
在代码中设置Activity的方向改变的处理。
这种方式的前提是在AndroidManifest.xml中注册configChanges属性,然后在代码中重写onConfigurationChanged
,这样在横竖屏切换前会调用我们的代码,可以以此为切入点做一些处理。
<activity android:name="MyActivity" android:screenOrientation="landscape" android:configChanges="orientation" >
orientation代表横竖屏切换的变化,关于android:configChanges属性的参数可以
参考: http://www.cnblogs.com/adamzuocy/archive/2009/10/15/1583670.html
@Override public void onConfigurationChanged(Configuration newConfig) { if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { //说明当前转换成了横屏,做相应处理 } else if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ //说明当前转换成了竖屏,做相应处理 } super.onConfigurationChanged(newConfig); }
这样做在横竖屏切换时候就不会重新装载Activity了。我们可以发现在切屏时候onCreate()没有重新调用。
3:
与第二种方式有着异曲同工之妙的是第三种方法:
重写onSaveInstanceState(),onRestoreInstanceState()
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); }
横竖屏切换时候的顺序是这样的
onSaveInstanceState()----->重新载入Activity----->onRestoreInstanceState()
这样我们同样可以捕获切屏时间,加入我们的处理了。