1. 程式人生 > >應用橫豎屏切換造成、UI改變 、資料丟失的處理 onConfigurationChanged

應用橫豎屏切換造成、UI改變 、資料丟失的處理 onConfigurationChanged

我們直接進入主題

應該如何來解決這個問題呢

步驟一 許可權宣告:

<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是縱向)。