1. 程式人生 > 其它 >Android 開發學習程序0.33 橫豎屏切換

Android 開發學習程序0.33 橫豎屏切換

安卓橫豎屏大多數已經在manifest檔案中將activity使用android:screenOrientation="portrait"屬性寫死,如簡單的介面切換可直接更改為"sensor"屬性,但如複雜的介面需使用其他方法。

1監聽橫豎屏切換變化

        <activity android:name=".MainActivity"
            android:configChanges="orientation|keyboard|layoutDirection|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

以下是manifest檔案中的配置,設定configchanges屬性是為了重寫設定切換監聽方法,設定為orientation或orientation|keyboardHidden或不設定時,生命週期均會執行一次,設定android:configChanges="orientation|keyboardHidden|screenSize"android:configChanges="orientation|keyboardHidden|screenSize" 不重新走生命週期方法僅執行onConfigurationChanged方法,注意這個改變實在api 13開始的。而之前版本已經很少使用,不再詳述。
程式碼中切換橫豎屏的方法為 Activity.this.setRequestedOrientation 在設定後還需要setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)方法恢復,這是由於設定方法相當於manifest檔案設定,使用後就不會重力感應改變方向。如果不重走生命週期可以使用下方法
切換佈局。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
            Toast.makeText(getApplicationContext(), "橫屏", Toast.LENGTH_SHORT).show();
       //切換到橫屏  
      //修改佈局檔案  
      setContentView(R.layout.activity_main);  
      //findViewById ....   
        }else{
            Toast.makeText(getApplicationContext(), "豎屏", Toast.LENGTH_SHORT).show();
        }
    }

如果使用重走生命週期,可能遇到儲存當前狀態的問題。重寫activity的onSaveInstanceState方法儲存資料,資料以bundle形式儲存,先將資料儲存在方法形參中再執行super父方法。
儲存後使用onRestoreInstanceState方法取出資料,在onCreate方法中可以取出儲存的資料。
如果在資原始檔夾多新增layout-land可以建立同名的佈局檔案,在橫豎屏切換的過程中自動顯示正確UI。

吾生也有涯,而知也無涯。以有涯隨無涯,殆已