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

Android 横竖屏切换的处理

2013年04月24日 ⁄ 综合 ⁄ 共 1256字 ⁄ 字号 评论关闭

Android 中,缺省情况下屏幕的切换动会销毁当前的Activity,并且重启Activity。当然这种缺省的处理方式可能不符合我们的要求。 可以有多种选择改变这种处理方式。

 

一种方式是在销毁Activity前保存数据,在Activity再次Create的时候载入配置。onSaveInstanceState 负责在销毁Activity之前保存数据。

 

 

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);

		if (dataString != null) {
			outState.putString("data", dataString);
		}
	}

 

onCreate(Bundle savedInstanceState) 负责恢复数据

 

 

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
                dataString = savedInstanceState.getString("data");
        }

 

onRetainNonConfigurationInstance() 和 getLastNonConfigurationInstance() 可以实现类似的功能。 前者用来保存数据,后者用来恢复数据,不过只限于Activity被销毁后马上被恢复的情况。

 

更常用的方式是阻止Activity的销毁和重新启动。需要首先在AndroidManifest.xml中给相应的Activity加一个属性。

 

 

android:configChanges="keyboardHidden|orientation"

 

然后再程序中截获 onConfigurationChanged(Configuration newConfig) 函数并且自己加以处理,这时候屏幕方向的切换不会重新启动Activity。必要的时候可以根据屏幕方向的不同重新布置布局。

 

 

 

	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
		    setupLandScapeViews();
                } 
                else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
		    setupPortraitViews();
                }
		
	}

 

 

如果不希望改变屏幕的显示方式,比如游戏中希望保持一种方式显示,可以在Activity中加一句

 

 

android:screenOrientation="portrait"

 

这样的话屏幕方向变化不会再改变显示方式和重启Activity。

 

 

抱歉!评论已关闭.