我們要設(shè)置屏幕的方向骆膝,當然先需要判斷屏幕的方向,下面提供兩種方法:
1嚼摩,? DisplayMetrics dm = new DisplayMetrics();? //顯示的度量
getWindowManager().getDefaultDisplay().getMetrics(dm);? //必須調(diào)用钦讳,window才會賦值給dm
(或者DisplayMetrics dm = getResources().getDisplayMetrics())
int width = dm.widthPixels;
int height = dm.heightPixels;
然后根據(jù)寬高的大小比矿瘦,判斷是豎屏(portrait)還是橫屏(landscape)。
2蜂厅,if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT)
是否為豎屏匪凡,或者也可以判斷是否為橫屏。
ok掘猿,現(xiàn)在知道當前屏幕是什么方向(當然不知道好像也沒什么關(guān)系病游,霸王硬上弓),那么就可以做出需求設(shè)置:
1稠通,在代碼中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);? 設(shè)置為橫屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);? 設(shè)置為豎屏
2衬衬,在項目的AndroidManifest.xml中的Activity上設(shè)置Android:screenOrientation的屬性:
"unspecified":默認值,不特別指定改橘,由系統(tǒng)來判斷顯示方向滋尉;
"landscape":橫屏顯示(寬比高要長),豎屏向左或右旋轉(zhuǎn)90度飞主;userLanscape,只豎屏旋轉(zhuǎn)90度狮惜;
"portrait":豎屏顯示(高比寬要長)?,userPortrait跟它效果一樣就是豎屏而已;
"user":用戶當前首選的方向碌识;
"behind":和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)?碾篡;
"sensor":有物理的感應(yīng)器來決定,一般設(shè)置的自動旋轉(zhuǎn)應(yīng)該就是根據(jù)物理的感應(yīng)器來相應(yīng)的筏餐;
"nosensor":忽略物理感應(yīng)器开泽,這樣就不會隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外);
如果我們不設(shè)置屏幕的方向魁瞪,那么默認的方向就會隨著系統(tǒng)的改變而改變穆律,在此時回顧一下相關(guān)的Activity的生命周期:
豎屏(portrait)轉(zhuǎn)橫屏(landscape)或者是橫屏轉(zhuǎn)豎屏,Activity生命周期都只走一次(并沒有橫屏轉(zhuǎn)豎屏走兩次的說法)导俘。
當然也可以通過在AndroidManifest.xml中的Activity上設(shè)置android:configChanges的屬性來控制生命周期:
“mcc“:移動國家號碼峦耘,由三位數(shù)字組成,每個國家都有自己獨立的MCC旅薄,可以識別手機用戶所屬國家贡歧。
“mnc“:移動網(wǎng)號,在一個國家或者地區(qū)中赋秀,用于區(qū)分手機用戶的服務(wù)商利朵。
“l(fā)ocale“:用戶所在地區(qū)發(fā)生變化。
“touchscreen“:觸摸的屏幕發(fā)生變化(這個應(yīng)該不容易發(fā)生)
“keyboard“:鍵盤模式發(fā)生變化猎莲,例如:用戶接入外部鍵盤輸入绍弟。
“keyboardHidden“:用戶打開手機硬件鍵盤
“navigation“:導(dǎo)航欄類型發(fā)生變化(應(yīng)該指硬件的導(dǎo)航按鈕功能發(fā)生變化)
“orientation“:設(shè)備旋轉(zhuǎn),橫向顯示和豎向顯示模式切換著洼。
“fontScale“:全局字體大小縮放發(fā)生改變
幾種常用的情況:
1樟遣,android:configChanges="orientation"而叼,activity的生命周期無論值豎屏切橫屏還是橫屏切豎屏都是走一遍生命周期,不會調(diào)用onConfigurationChanged的方法豹悬;
2葵陵,android:configChanges="screenSize",結(jié)果同上瞻佛;
3脱篙,android:configChanges="orientation|screenSize",Activity在切換橫豎屏時不走生命周期伤柄,只會在切換的時候調(diào)用onConfigurationChanged的方法绊困。
以上測試環(huán)境:小米2(android5.0系統(tǒng)),與部分參考結(jié)果不同适刀,歡迎測試秤朗。
參考:
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