Android手機運行時候,一般使用者都是豎屏的,但是經常不經意間會旋轉手機,這時候程式就會出現異常,以為在選在螢幕時候重新裝載了Acitivity,那麼如何解決這個問題呢,總結如下三條:
1:
在AndroidManifest.xml中設定Activity的方向屬性。
1.1. 固定為豎屏
<activity android:name="MyActivity" android:screenOrientation="portrait"/>
1.2. 固定為橫屏
<activity android:name="MyActivity" android:screenOrientation="landscape"/>
2:
在代碼中設定Activity的方向改變的處理。
這種方式的前提是在AndroidManifest.xml中註冊configChanges屬性,然後在代碼中重寫onConfigurationChanged
,這樣在橫豎屏切換前會調用我們的代碼,可以以此為切入點做一些處理。
<activity
android:name="MyActivity"
android:screenOrientation="landscape"
android:configChanges="orientation"
>
orientation代表橫豎屏切換的變化,關於android:configChanges屬性的參數可以
參考: http://www.cnblogs.com/adamzuocy/archive/2009/10/15/1583670.html
@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);
}
這樣做在橫豎屏切換時候就不會重新裝載Activity了。我們可以發現在切屏時候onCreate()沒有重新調用。
3:
與第二種方式有著異曲同工之妙的是第三種方法:
重寫onSaveInstanceState(),onRestoreInstanceState()
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}
橫豎屏切換時候的順序是這樣的
onSaveInstanceState()----->重新載入Activity----->onRestoreInstanceState()
這樣我們同樣可以捕獲切屏時間,加入我們的處理了。