[安卓]防止Activity在横竖屏切换时重新创建
- - 蓝飞技术部落格这两天在写一个安卓应用内嵌 WebView 的小 Demo,其中需要支持 HTML5 视频的全屏播放,结果就卡在了横屏切换上,在切换到横屏时正在播放的视频就消失了,但声音还在,排查了许久发现是横屏时 Activity 会被重新创建,百度给的答案是在 AndroidManifest.xml 中对应的 activity 标签中增加属性:.
在写程序时,往往会遇到这样一个问题,在竖屏输入一些内容后,再横屏。对应的内容变化了。其实这个问题就是activity重启了,所引起的。以下有:禁止横屏和竖屏切换,不妨了解下。
其实实现这个要求很简单,只要在
AndroidManifest.xml 里面加入这一行 android :screenOrientation="landscape "(landscape 是横向,portrait 是纵向)。
在android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置。在activity加上android:configChanges="keyboardHidden|orientation"属性,就不会重启activity.而是去调用onConfigurationChanged(Configuration newConfig).这样就可以在这个方法里调整显示方式.
MainActivity中:
public void onConfigurationChanged(Configuration newConfig) { try { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE"); } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT"); } } catch (Exception ex) { } }
public void onConfigurationChanged(Configuration newConfig) { try { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE"); } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT"); } } catch (Exception ex) { } }