【转】 Android 屏幕切换总结
轉(zhuǎn)自?http://www.open-open.com/lib/view/open1328069449468.html
Android橫豎屏要解決的問(wèn)題應(yīng)該就兩個(gè):
一.布局問(wèn)題
二.重新載入問(wèn)題
1.布局問(wèn)題:如果不想讓軟件在橫豎屏之間切換,最簡(jiǎn)單的辦法就是在項(xiàng)目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation屬性,他有以下幾個(gè)參數(shù):
"unspecified":默認(rèn)值 由系統(tǒng)來(lái)判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會(huì)有不同的顯示方向.?
"landscape":橫屏顯示(寬比高要長(zhǎng))?
"portrait":豎屏顯示(高比寬要長(zhǎng))?
"user":用戶當(dāng)前首選的方向?
"behind":和該Activity下面的那個(gè)Activity的方向一致(在Activity堆棧中的)?
"sensor":有物理的感應(yīng)器來(lái)決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會(huì)橫豎屏切換。?
"nosensor":忽略物理感應(yīng)器,這樣就不會(huì)隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外)。
也可以在Java代碼中通過(guò)setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)來(lái)設(shè)置。
如果要讓軟件在橫豎屏之間切換,由于橫豎屏的高寬會(huì)發(fā)生轉(zhuǎn)換,有可能會(huì)要求不同的布局。可以通過(guò)以下方法來(lái)切換布局:
1)在res目錄下建立layout-land和layout-port目錄,相應(yīng)的layout文件不變,比如main.xml。layout-land是橫屏的layout,layout-port是豎屏的layout,其他的不用管,模擬器會(huì)自動(dòng)尋找。
2)通過(guò) this.getResources().getConfiguration().orientation來(lái)判斷當(dāng)前是橫屏還是豎屏然后來(lái)加載相應(yīng)的 xml布局文件。因?yàn)楫?dāng)屏幕變?yōu)闄M屏的時(shí)候,系統(tǒng)會(huì)重新呼叫當(dāng)前Activity的onCreate方法,你可以把以下方法放在你的onCreate中來(lái)檢查當(dāng)前的方向,然后可以讓你的setContentView來(lái)載入不同的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 | } |
在onConfigurationChanged()方法中也可以檢測(cè)擁有硬鍵盤(pán)的鍵盤(pán)狀態(tài)
| 1 | //檢測(cè)實(shí)體鍵盤(pán)的狀態(tài):推出或者合上 |
| 2 | if?(newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){ |
| 3 | ???//實(shí)體鍵盤(pán)處于推出狀態(tài),在此處添加額外的處理代碼 |
| 4 | } |
| 5 | else?if?(newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){ |
| 6 | ???//實(shí)體鍵盤(pán)處于合上狀態(tài),在此處添加額外的處理代碼 |
| 7 | } |
2.重新載入問(wèn)題。如果不需要從新載入,可以在AndroidManifest.xml中加入配置 android:configChanges="orientation|keyboardHidden",配置 android:configChanges的作用就是如文檔所說(shuō)的: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就不會(huì)重復(fù)的調(diào)用onCreate()甚至不會(huì)調(diào)用onPause、onResume.只會(huì)調(diào)用一個(gè) onConfigurationChanged(Configuration newConfig)。如果需要重新載入,則不需要做任何修改。不過(guò)如果需要在重新載入過(guò)程中保存之前的操作內(nèi)容或數(shù)據(jù),則需要保存之前的數(shù)據(jù)。然后在 activity的onCreate()中取出來(lái)。當(dāng)然,如此就不能設(shè)置android:configChanges()了,否則就不會(huì)調(diào)用 onCreate()方法。
如果要徹底禁止翻轉(zhuǎn),可以設(shè)置android:screenOrientation的屬性為nosensor,如此就可以忽略重力感應(yīng)帶來(lái)的麻煩了。不過(guò)在模擬器上不管用,在真機(jī)上是正確的。android:screenOrientation="portrait"
則無(wú)論手機(jī)如何變動(dòng),擁有這個(gè)屬性的activity都將是豎屏顯示。
android:screenOrientation="landscape",為橫屏顯示。
這里提一個(gè)小知識(shí),Android模擬器中,快捷鍵"Ctrl+F11/F12"可以實(shí)現(xiàn)轉(zhuǎn)屏
轉(zhuǎn)載于:https://www.cnblogs.com/DonkeyTomy/articles/3245988.html
總結(jié)
以上是生活随笔為你收集整理的【转】 Android 屏幕切换总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: N!-201308071627.txt
- 下一篇: Android 获取本地外网IP、内网I