Android 手机应用运行的时候,一般用户都是竖屏,突然将手机横屏的时候,那么程序会出现异常,因为在Android中每次屏幕切换都会,重启当前的Activiy,这种情况下,异常的处理方式有三种:
1.锁定横竖屏
在AndroidManifest.xml文件中,对Activity定义屏幕方向属性只能为横屏或竖屏。
将屏幕固定为横屏:
<activity android:screenOrientation="portrait">
将屏幕固定为竖屏:
<activity android:screenOrientation="landscape">
因为一个Android应用中会有多个Activity,那么可以根据需要去配置每个activity的显示方式,如果不设置,默认可以横竖屏切换,或在源代码中横竖屏。
设置竖屏:
SetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
设置横屏:
SetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
2.源代码中处理横竖屏事件
在AndroidManifest.xml文件中对Activity注册android:configChanges属性,然后在对应的Activity源代码中重写onConfigurationChanged()函数即可
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
if(this.getResources().getConfiguration().oritention==Configuration.ORITENTION.LANDSCAPE){
Log.e("Himi","当前屏幕切换成横屏显示模示");
} else if (this.getResources().getConfiguration().oritention==Configuration.ORITENTION.PORTRAIT){
Log.e("Himi","当前屏幕切换成竖屏显示模示");
}
}
使用此方式在切换横竖屏的时候,Android就不会重启当前Activity了。
3. 重写onSaveInstanceState() 与 onRestoreInstanceState()函数
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
Log.e("Himi","ONSAVE");
}
@Override
public void onRestoreInstanceState(Bundle outState){
super.onRestoreInstanceState(outState);
Log.e("Himi","RESTORE");
}
在屏幕进行横竖屏切换的时候,会响应onSaveInstanceState()函数,然后重启进入当前Activity,最后再执行onRestoreInstanceState函数,通过切换这两个函数进行屏幕横竖屏的处理。