在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity
系统会杀死Activity
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onPause
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onStop
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onDestroy
并重新启动Activity
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate 上次看到了223页
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onStart
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onRestoreInstanceState 上次看到了223页
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onResume
当横竖屏切换的时候,系统会杀死Activity并重新启动Activity,这是不合理的,但是安卓系统默认就是这样设计的
解决Activity横竖屏切换不杀死Activity 不重新启动Activity,只需在Activity节点中添加 android:configChanges="orientation|keyboardHidden|screenSize" 即可
<activity android:name=".temp_data.TempDataActivity" android:configChanges="orientation|keyboardHidden|screenSize"> </activity>
监听横竖屏切换,为什么要监听横竖屏切换呢,因为有这样的需求:竖屏显示界面 和 横屏显示界面不一样
需要在Activity重写以下方法,即可监听横竖屏切换:
/** * 需要在Activity节点设置android:configChanges="orientation|keyboardHidden|screenSize" * 横竖屏切换才会调用此方法,进行监听 * @param newConfig */ @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // 获取到屏幕的方向 int orientation = newConfig.orientation; switch (orientation) { // 横屏 case Configuration.ORIENTATION_LANDSCAPE: setContentView(R.layout.activity_temp_data_horizontal); break; // 竖屏 case Configuration.ORIENTATION_PORTRAIT: setContentView(R.layout.activity_temp_data); break; } }
activity_temp_data.xml (横屏需要的布局文件)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是竖屏" android:textSize="40dp" android:layout_centerInParent="true" /> </RelativeLayout>
activity_temp_data_horizontal.xml (竖屏需要的布局文件)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是横屏,我很宽我很宽" android:textSize="40dp" android:layout_centerInParent="true" /> </RelativeLayout>
效果:
在开发中,如果需求没有明确要指定 横屏 或 竖屏,可以直接把屏幕方向定死为 竖屏 android:screenOrientation="portrait",这样可以减少很多不必要带来的麻烦和Bug