1. 程式人生 > >Android強制橫屏或豎屏注意事項

Android強制橫屏或豎屏注意事項

經過Android5.1測試:

一個Activity如果在onReusume裡沒有特別宣告,或沒在AndroidManifest.xml配置成橫屏或豎屏,在旋轉時其宣告週期為:onCreate——onStart—onResume—螢幕旋轉—-onPause(失去焦點)—-onStop(徹底看不見)—onDestory,然後重新onCreate—onStart—-onResume,即又走了一遍。

02-17 15:47:17.933 E/MainActivity( 7461): start onSaveInstanceState~~~
02-17 15:47:17.933 E/MainActivity( 7461): start onPause~~~
02-17 15:47:17.933 E/MainActivity( 7461): start onStop~~~
02-17 15:47:17.933 E/MainActivity( 7461): start onDestroy~~~
02-17 15:47:17.974 E/MainActivity( 7461): start onCreate~~~
02-17 15:47:17.994 E/MainActivity( 7461): start onStart~~~
02-17 15:47:17.994 E/MainActivity( 7461): start onRestoreInstanceState~~~
02-17 15:47:17.994 E/MainActivity( 7461): start onResume~~~

為此需要強制設為橫屏或豎屏,方法大概三種:

1、AndroidManifest.xml 裡面設定


        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" 
            android:screenOrientation ="landscape">
        </activity>

2、在onResume裡

@Override  
protected void onResume() {
if
(getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } super.onResume(); }

這種方法強烈不建議,誰用誰知道,在大的app不同方向啟動時會慢的要死!如果在AndroidManifest.xml中設定了android:configChanges=”orientation”,豎屏狀態開啟也會呼叫onConfigurationChanged介面

.

02-17 15:51:05.696 E/MainActivity( 7666): start onCreate~~~
02-17 15:51:05.756 E/MainActivity( 7666): start onStart~~~
02-17 15:51:05.856 E/MainActivity( 7666): start onResume~~~
02-17 15:51:05.896 E/MainActivity( 7666): start onConfigurationChanged~~~
3、在onConfigurationChanged裡判斷,為了onConfigurationChanged在監聽螢幕方向變化有效需要以下條件:

a、AndroidManifest.xml增加許可權(經過測試5.1不需要,其它自己測試看吧)

b、AndroidManifest.xml裡設定的MiniSdkVersion和TargetSdkVersion屬性大於等於13(經過測試5.1已經是22,自然不需要)

c、在AndroidManifest.xml的Activity裡增加(經過測試5.1只需要orientation,其它自己測試,可能還需要screenSize和layoutDirection):

android:configChanges=”orientation”

經過上面就可以在onConfigurationChanged()檢測螢幕方向變化事件,如果一旦在AndroidManifest.xml裡設死了方向,這塊就失效了。newConfig.orientation = 1 時表示豎屏,為2則橫屏。通過判斷這,然後setRequestedOrientation()來設定橫屏或豎屏。

這個onConfigurationChanged()相關的配置,最大的好處讓Activity方向變化時不進行onPause/onStop/onDestory等操作,但如果想通過setRequestOrientation的方式設定橫屏或豎屏,帶來的負面效果跟第2種方式一樣,慢的要死。

總之,方向還是在配置裡寫死吧!