【温故知新】之Android中横竖屏切换处理的方式

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()

这样我们同样可以捕获切屏时间,加入我们的处理了。




你可能感兴趣的:(android)