如果不想讓Activity在旋轉螢幕時被自動轉向,可以在AndroidManifest.xml中設定Activity的屬性:
- android:screenOrientation="portrait" (指定為直向)
- android:configChanges="keyboard|keyboardHidden|orientation" (告訴系統,我要自己處理轉向問題)
android:screenOrientation="portrait">android:configChanges="keyboard|keyboardHidden|orientation"
原本我以為只要指定configChanges="orientation"來處理轉向就好,但不能單只有這個,還必須加上keyboard及keyboardHidden這兩個當螢幕鍵盤出現的時候也要處理,才能正常執行。
如此你可以在Activity的onConfigurationChanged方法中自己處理螢幕旋時要如何處理。
以下會做兩個測試,一個是有鎖定螢幕方向,一個沒有。
測試的程式碼:
public class RotationDeviceDemoActivity extends Activity {
private final String TAG = "==DEMO==";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, "onCreate");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, "onConfigurationChanged");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(TAG, "onRestoreInstanceState");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(TAG, "onSaveInstanceState");
}
}
測試1:當Activity沒有設定configChanges及screenOrientation時(無鎖定螢幕方向)
執行結果:
523: D/==DEMO==(227): onCreate <===第一次開啟Activity
823: D/==DEMO==(227): onSaveInstanceState <===旋轉螢幕時可讓你儲存狀態
823: D/==DEMO==(227): onDestroy <===接著銷毀Activity
883: D/==DEMO==(227): onCreate <===然後從新建立一個新的已轉向的Activity
883: D/==DEMO==(227): onRestoreInstanceState <===並且可讓你取回剛才存下來的狀態
測試2:有設定configChanges及screenOrientation(鎖定螢幕方向)
執行結果:
184: D/==DEMO==(324): onCreate <===第一次開啟Activity
074: D/==DEMO==(324): onConfigurationChanged <===旋轉螢幕
554: D/==DEMO==(324): onConfigurationChanged <===再轉一次
你會發現,Activity這時不會儲存狀態及銷毀,它只會執行onConfigurationChanged,不管你轉幾次方向,都只會觸發這方法。你可以自行在這裡指定不同的layout佈局,或什麼都不做。
沒有留言:
張貼留言