现在的位置: 首页 > 综合 > 正文

手机横竖屏切换处理

2013年03月16日 ⁄ 综合 ⁄ 共 1525字 ⁄ 字号 评论关闭

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

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

抱歉!评论已关闭.