如果不想讓軟件在橫豎屏之間切換:
可以通過在AndroidManifest.xml中設(shè)置activity中的Android:screenOrientation屬性值來實現(xiàn)。
比如下列設(shè)置
android:screenOrientation="portrait"
則無論手機如何變動,擁有這個屬性的activity都將是豎屏顯示。
android:screenOrientation="landscape",為橫屏顯示。
上述修改也可以在java代碼中通過類似如下代碼來設(shè)置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
另外,android中每次屏幕的切換動會重啟Activity,所以應(yīng)該在Activity銷毀前保存當(dāng)前活動的狀態(tài),在Activity再次Create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
"unspecified":默認(rèn)值 由系統(tǒng)來判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會有不同的顯示方向. "landscape":橫屏顯示(寬比高要長) "portrait":豎屏顯示(高比寬要長) "user":用戶當(dāng)前首選的方向 "behind":和該Activity下面的那個Activity的方向一致(在Activity堆棧中的) "sensor":有物理的感應(yīng)器來決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會橫豎屏切換。 "nosensor":忽略物理感應(yīng)器,這樣就不會隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外)。
也可以在Java代碼中通過setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)來設(shè)置。
如果要讓軟件在橫豎屏之間切換,
由于橫豎屏的高寬會發(fā)生轉(zhuǎn)換,有可能會要求不同的布局。可以通過以下方法來切換布局:
1)在res目錄下建立layout-land和layout-port目錄,相應(yīng)的layout文件不變,比如main.xml。layout-land是橫屏的layout,layout-port是豎屏的layout,其他的不用管,模擬器會自動尋找。
2)通過 this.getResources().getConfiguration().orientation來判斷當(dāng)前是橫屏還是豎屏然后來加載相應(yīng)的 xml布局文件。因為當(dāng)屏幕變?yōu)闄M屏的時候,系統(tǒng)會重新呼叫當(dāng)前Activity的onCreate方法,你可以把以下方法放在你的onCreate中來檢查當(dāng)前的方向,然后可以讓你的setContentView來載入不同的layout xml.1 | if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ |
2 | Log.i("info","landscape"); // 橫屏 |
3 | } |
4 | else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) { |
5 | Log.i("info","portrait"); // 豎屏 |
6 | } |
1 | //檢測實體鍵盤的狀態(tài):推出或者合上 |
2 | if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){ |
3 | //實體鍵盤處于推出狀態(tài),在此處添加額外的處理代碼 |
4 | } |
5 | else if(newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){ |
6 | //實體鍵盤處于合上狀態(tài),在此處添加額外的處理代碼 |
7 | } |
如果不需要從新載入,可以在AndroidManifest.xml中加入配置 android:configChanges="orientation|keyboardHidden",配置 android:configChanges的作用就是如文檔所說的:Specify one or more configuration changesthat the activity will handle itself. If not specified, the activity will berestarted if any of these configuration changes happen in the system。這樣在程序中Activity就不會重復(fù)的調(diào)用onCreate()甚至不會調(diào)用onPause、onResume.只會調(diào)用一個 onConfigurationChanged(Configuration newConfig)。如果需要重新載入,則不需要做任何修改。不過如果需要在重新載入過程中保存之前的操作內(nèi)容或數(shù)據(jù),則需要保存之前的數(shù)據(jù)。然后在 activity的onCreate()中取出來。當(dāng)然,如此就不能設(shè)置android:configChanges()了,否則就不會調(diào)用 onCreate()方法。
如果要徹底禁止翻轉(zhuǎn),可以設(shè)置android:screenOrientation的屬性為nosensor,如此就可以忽略重力感應(yīng)帶來的麻煩了。不過在模擬器上不管用,在真機上是正確的。android:screenOrientation="portrait"
則無論手機如何變動,擁有這個屬性的activity都將是豎屏顯示。
android:screenOrientation="landscape",為橫屏顯示。
這里提一個小知識,Android模擬器中,快捷鍵"Ctrl+F11/F12"可以實現(xiàn)轉(zhuǎn)屏
二、總結(jié)
總之,對于橫豎屏切換的問題,統(tǒng)計了下,大家的解決辦法是: ①不理會。。②只豎屏顯示(android:screenOrientation="portrait")
新聞熱點
疑難解答