我們要設置屏幕的方向,當然先需要判斷屏幕的方向,下面提供兩種方法:
1,? DisplayMetrics dm = new DisplayMetrics();? //顯示的度量
getWindowManager().getDefaultDisplay().getMetrics(dm);? //必須調用,window才會賦值給dm
(或者DisplayMetrics dm = getResources().getDisplayMetrics())
int width = dm.widthPixels;
int height = dm.heightPixels;
然后根據寬高的大小比,判斷是豎屏(portrait)還是橫屏(landscape)。
2,if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT)
是否為豎屏,或者也可以判斷是否為橫屏。
ok,現在知道當前屏幕是什么方向(當然不知道好像也沒什么關系,霸王硬上弓),那么就可以做出需求設置:
1,在代碼中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);? 設置為橫屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);? 設置為豎屏
2,在項目的AndroidManifest.xml中的Activity上設置Android:screenOrientation的屬性:
"unspecified":默認值,不特別指定,由系統來判斷顯示方向;
"landscape":橫屏顯示(寬比高要長),豎屏向左或右旋轉90度;userLanscape,只豎屏旋轉90度;
"portrait":豎屏顯示(高比寬要長)?,userPortrait跟它效果一樣就是豎屏而已;
"user":用戶當前首選的方向;
"behind":和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)?;
"sensor":有物理的感應器來決定,一般設置的自動旋轉應該就是根據物理的感應器來相應的;
"nosensor":忽略物理感應器,這樣就不會隨著用戶旋轉設備而更改了("unspecified"設置除外);
如果我們不設置屏幕的方向,那么默認的方向就會隨著系統的改變而改變,在此時回顧一下相關的Activity的生命周期:
豎屏(portrait)轉橫屏(landscape)或者是橫屏轉豎屏,Activity生命周期都只走一次(并沒有橫屏轉豎屏走兩次的說法)。
當然也可以通過在AndroidManifest.xml中的Activity上設置android:configChanges的屬性來控制生命周期:
“mcc“:移動國家號碼,由三位數字組成,每個國家都有自己獨立的MCC,可以識別手機用戶所屬國家。
“mnc“:移動網號,在一個國家或者地區中,用于區分手機用戶的服務商。
“locale“:用戶所在地區發生變化。
“touchscreen“:觸摸的屏幕發生變化(這個應該不容易發生)
“keyboard“:鍵盤模式發生變化,例如:用戶接入外部鍵盤輸入。
“keyboardHidden“:用戶打開手機硬件鍵盤
“navigation“:導航欄類型發生變化(應該指硬件的導航按鈕功能發生變化)
“orientation“:設備旋轉,橫向顯示和豎向顯示模式切換。
“fontScale“:全局字體大小縮放發生改變
幾種常用的情況:
1,android:configChanges="orientation",activity的生命周期無論值豎屏切橫屏還是橫屏切豎屏都是走一遍生命周期,不會調用onConfigurationChanged的方法;
2,android:configChanges="screenSize",結果同上;
3,android:configChanges="orientation|screenSize",Activity在切換橫豎屏時不走生命周期,只會在切換的時候調用onConfigurationChanged的方法。
以上測試環境:小米2(android5.0系統),與部分參考結果不同,歡迎測試。
參考:
1,http://www.cnblogs.com/charley_yang/archive/2011/04/17/2018940.html
2,http://blog.csdn.net/u010980446/article/details/52653045
3,http://blog.csdn.net/dingxiaowei2013/article/details/24852239