android 横竖屏的 处理 转

 参考

http://community-china.developer.motorola.com/t5/%E4%B8%BA%E6%91%A9%E6%89%98%E7%BD%97%E6%8B%89%E6%89%8B%E6%9C%BA%E5%BC%80%E5%8F%91Android%E5%BA%94%E7%94%A8/Android-%E6%A8%AA%E7%AB%96%E5%B1%8F%E5%88%87%E6%8D%A2%E7%9A%84%E5%A4%84%E7%90%86/td-p/228

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值