onConfigurationChanged的目的是為了規避橫豎屏切換干掉activity而重新調用onCreate方法的問題;
有的時候,我們希望重新進入OnCreate生命周期,此時可以調用onSaveInstanceState和onRestoreInstanceState方法,可參考http://www.cnblogs.com/leavescy/p/7845921.html;
而有的時候,我們又不希望這種事情發誓,所以就要重寫onConfigurationChanged方法;
1. 在AndroidManifest.xml中添加一些權限:
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
2. 配置目標activity屬性:
android:configChanges="orientation|screenSize">
如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.xxx.dictionarychange"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/AppTheme"> 12 <activity android:name=".MainActivity" 13 android:configChanges="orientation|screenSize"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN" /> 16 17 <category android:name="android.intent.category.LAUNCHER" /> 18 </intent-filter> 19 </activity> 20 21 22 </application> 23 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission> 24 25 </manifest>
3. 最后在MainActivity.java中重寫onConfigurationChanged方法,如下所示:
里面打印出來了一些日志,可以提示現在是橫屏還是豎屏;
@Override public void onConfigurationChanged(Configuration newConfig) { if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ Log.i("LANDSCAPE = ", String.valueOf(Configuration.ORIENTATION_LANDSCAPE)); } else if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ Log.i("LANDSCAPE = ", String.valueOf(Configuration.ORIENTATION_PORTRAIT)); } super.onConfigurationChanged(newConfig); }