應用橫豎屏切換造成、UI改變 、資料丟失的處理 onConfigurationChanged
阿新 • • 發佈:2018-12-14
我們直接進入主題
應該如何來解決這個問題呢
步驟一 許可權宣告:
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
步驟二 新增要防止的事件型別:如下
<activity android:name=".Fragment.ViewPagerFragment" android:configChanges="keyboard|screenSize|orientation|layoutDirection"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
步驟三:重寫Activity中的onConfigurationChanged方法。
@Override public void onConfigurationChanged(Configuration newConfig) { if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { //橫屏 } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { //豎屏 } super.onConfigurationChanged(newConfig); }
注意:
自從Android 3.2(API 13),在設定Activity的android:configChanges="orientation|keyboardHidden"後,還是一樣會重新呼叫各個生命週期的。
因為screen size也開始跟著裝置的橫豎切換而改變。
所以,在AndroidManifest.xml裡設定的MiniSdkVersion和 TargetSdkVersion屬性大於等於13的情況下,如果你想阻止程式在執行時重新載入Activity,除了設定"orientation"
你還必須設定"ScreenSize"。
解決方法:
AndroidManifest.xml中設定android:configChanges="orientation|screenSize“
禁止橫豎屏
在AndroidManifest.xml的activity(需要禁止轉向的activity)配置中加入 android:screenOrientation=”landscape”屬性即可(landscape是橫向,portrait是縱向)。