Android橫屏豎屏切換的問題_第1頁
Android橫屏豎屏切換的問題_第2頁
Android橫屏豎屏切換的問題_第3頁
Android橫屏豎屏切換的問題_第4頁
Android橫屏豎屏切換的問題_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、一、禁止橫豎屏轉(zhuǎn)換Android橫豎屏切換在手機(jī)開發(fā)中比較常見,很多軟件在開發(fā)過程中為了避免橫豎屏切換時(shí)引發(fā)不必要的麻煩,通常禁止掉橫豎屏的切換,通過在AndroidManifest.xml中設(shè)置activity中的android:screenOrientation屬性值來實(shí)現(xiàn)。比如下列設(shè)置android:screenOrientation="portrait"則無論手機(jī)如何變動(dòng),擁有這個(gè)屬性的activity都將是豎屏顯示。android:screenOrientation="landscape",為橫屏顯示。上述修改也可以在Java代碼中通過類似如下

2、代碼來設(shè)置setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)另外,android中每次屏幕的切換動(dòng)會(huì)重啟Activity,所以應(yīng)該在Activity銷毀前保存當(dāng)前活動(dòng)的狀態(tài),在Activity再次Create的時(shí)候載入配置,那樣,進(jìn)行中的游戲就不會(huì)自動(dòng)重啟了!二、橫豎屏切換如果要讓軟件在橫豎屏之間切換,由于橫豎屏的高寬會(huì)發(fā)生轉(zhuǎn)換,有可能會(huì)要求不同的布局??梢酝ㄟ^以下兩種方法來切換布局:1)在res目錄下建立layout-land和layout-port目錄,相應(yīng)的layout文件名不變,比如main.xml。la

3、yout-land是橫屏的layout,layout-port是豎屏的layout,其他的不用管,橫豎屏切換時(shí)程序?yàn)檎{(diào)用Activity的onCreate方法,從而加載相應(yīng)的布局。2)假如布局資源不按照如上設(shè)置,則可以通過java代碼來判斷當(dāng)前是橫屏還是豎屏然后來加載相應(yīng)的xml布局文件。因?yàn)楫?dāng)屏幕變?yōu)闄M屏的時(shí)候,系統(tǒng)會(huì)重新呼叫當(dāng)前Activity的onCreate方法,你可以把以下方法放在你的onCreate中來檢查當(dāng)前的方向,然后可以讓你的setContentView來載入不同的layout xml。if(this.getResources().getConfiguration().ori

4、entation=Configuration.ORIENTATION_LANDSCAPE)       Log.i("info", "landscape"); / 橫屏   else if(this.getResources().getConfiguration().orientation=Configuration.ORIENTATION_PORTRAIT)       Lo

5、g.i("info", "portrait"); / 豎屏  三、通過onConfigurationChanged攔截橫豎屏變換按照二的操作,Activity每次橫豎屏切換都會(huì)重新調(diào)用onPause-> onStop-> onDestory-> onCreate->onStart->onResume,為此涉及到內(nèi)容和數(shù)據(jù)的保存和讀取,否則轉(zhuǎn)屏之前的內(nèi)容就會(huì)消失了。很多時(shí)候這樣的結(jié)果讓程序繁瑣,為此Android提供了在manifest中設(shè)置android:configChanges屬性,從而讓A

6、ctivity不延續(xù)上述的重建流程。在Android工程的Mainfest.xml中配置Activity:android:configChanges="keyboardHidden|orientation",橫豎屏切換之后就不會(huì)去執(zhí)行OnCreat函數(shù)了,而是會(huì)去調(diào)用onConfigurationChanged()這樣就能控制橫豎屏的切換了。用戶可以在Activity或View的onConfigurationChanged(Configuration newConfig)函數(shù)中獲取當(dāng)前橫豎屏參數(shù)。至于其調(diào)用順序跟touch時(shí)間的傳遞順序相似,不過他沒有消費(fèi)事件的概念,會(huì)順次

7、調(diào)用到每一個(gè)onConfigurationChanged函數(shù)。需要重寫Activity的onConfigurationChanged方法。實(shí)現(xiàn)方式如下,不需要做太多的內(nèi)容:Override        public void onConfigurationChanged(Configuration newConfig)                 su

8、per.onConfigurationChanged(newConfig);                if (this.getResources().getConfiguration().orientation = Configuration.ORIENTATION_LANDSCAPE)             

9、            / land do nothing is ok                 else if (this.getResources().getConfiguration().orientation = Configuration.ORIENTATION_PORTRAIT)  

10、0;                      / port do nothing is ok                        

11、; 需要注意的是,onConfigurationChanged函數(shù)中只能獲得橫豎屏切換后的參數(shù),在該函數(shù)中獲取不到新的Layout和控件的尺寸位置信息,如果要處理尺寸和位置信息,必須通過消息異步或者延時(shí)調(diào)用。四、徹底禁止翻轉(zhuǎn)當(dāng)然如果要徹底禁止翻轉(zhuǎn),可以設(shè)置android:screenOrientation的屬性為nosensor,如此就可以忽略重力感應(yīng)帶來的麻煩了。不過在模擬器上不管用,在真機(jī)上是正確的。這里提一個(gè)小知識,Android模擬器中,快捷鍵"Ctrl+F11/F12"可以實(shí)現(xiàn)轉(zhuǎn)屏五,自適應(yīng)轉(zhuǎn)換如果想讓它啟動(dòng)的時(shí)候是橫屏的話就橫屏表示,縱屏的話就縱屏表示

12、,然后手機(jī)切換橫豎屏就不能用了該怎么解決呢?首先:在Mainfest.xml中追加android:screenOrientation="sensor" android:configChanges="orientation|keyboardHidden"這兩個(gè)屬性。第二步:取得屏幕的長和寬,進(jìn)行比較設(shè)置橫豎屏的變量。1.  Display display = getWindowManager().getDefaultDisplay();  2.  int w

13、idth = display.getWidth();  3.  int height = display.getHeight();  4.  if (width > height)   5.      orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; 

14、; /橫屏6.   else   7.      orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;  /豎屏8.    第三步:在onConfigurationChanged()函數(shù)中追加this.setRequestedOrientation(orientation)就行了1.  public 

15、void onConfigurationChanged(Configuration newConfig)   2.      super.onConfigurationChanged(newConfig);  3.      this.setRequestedOrientation(orientation);  4.    但是這樣的話你切到別的畫

16、面的時(shí)候再回到原畫面,它就仍然是橫的或者是縱的。怎么讓它從別的屏幕回來后,又重新橫豎屏布局呢?只要在OnResume()中在設(shè)定下就行了。但是這個(gè)只支持橫豎屏只有一個(gè)layout的。橫豎屏分別對應(yīng)layout的還不知道該怎么解決。1.  protected void onResume()   2.      orientation = ActivityInfo.SCREEN_ORIENTATION_USER;  3. 

17、;     this.setRequestedOrientation(orientation);  4.      Display display = getWindowManager().getDefaultDisplay();  5.      int width = display.getWidth(); 

18、60;6.      int height = display.getHeight();  7.      if (width > height)   8.          orientation = ActivityInfo.SCREEN_

19、ORIENTATION_LANDSCAPE;  9.       else   10.         orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;  11.       12.   

20、  super.onResume();  13.   六、總結(jié)總之,對于橫豎屏切換的問題,統(tǒng)計(jì)了下,大家的解決辦法是: 不理會(huì)。 只豎屏顯示(android:screenOrientation="portrait")  只橫屏顯示(android:screenOrientation="landscape")簡單的防止重載:   在 AndroidManifest.xml中加入:android:configC

21、hanges="orientation|keyboardHidden"  在activity中重載onConfigurationChanged事件   Override  public void onConfigurationChanged(Configuration config)   super.onConfigurationChanged(config);  橫豎屏分別布局   橫豎屏分別布局的方法是:  &#

22、160;在res下新建   layout-land 橫屏   layout-port 豎屏   然后把layout中的xml文件分別考到以上目錄,修改布局就可以了代碼中不做任何更改。   在 AndroidManifest.xml文件中的 主Activity中加入   android:configChanges="orientation|keyboardHidden" 

23、0;然后在主Activity中的onConfigurationChanged加入 Overridepublic void onConfigurationChanged(Configuration config) super.onConfigurationChanged(config);if (config.orientation = Configuration.ORIENTATION_PORTRAIT) setContentView(R.layout.main); /布局 tv = (TextView) findViewById(R.id.EditText01); /控件&

24、#160;if (config.orientation = Configuration.ORIENTATION_LANDSCAPE) setContentView(R.layout.main); /布局 tv = (TextView) findViewById(R.id.EditText01); /控件 七、示例詳細(xì)步驟/- 第一步:獲得許可 需要在中添加相應(yīng)許可/- 第二步:根據(jù)不同的目標(biāo),針對Activity進(jìn)行設(shè)置目標(biāo)1:屏蔽橫豎屏的切換步驟:為Activity設(shè)置一個(gè)默認(rèn)的屏幕方向 方法如下: 在AndroidMan

25、ifest.xml中找到該Activity 添加代碼: android:name=".ActivityName"android:screenOrientation="landscape">設(shè)置Activity的默認(rèn)方向?yàn)椤皺M向”此處的screenOrientation有如下選項(xiàng): = unspecified 默認(rèn)值,由系統(tǒng)判斷狀態(tài)自動(dòng)切換 = landscape 橫屏 = portrait 豎屏 = user 用戶當(dāng)前設(shè)置的orientat

26、ion值 = behind 下一個(gè)要顯示的Activity的orientation值 = sensor 使用傳感器 傳感器的方向 = nosensor 不使用傳感器 基本等同于unspecified=目標(biāo)2:防止Activity的銷毀步驟:為Activity設(shè)置configChanges屬性 在AndroidManifest.xml中找到該Activity 添加代碼: android:name=".ActivityName"android:configChanges

27、="orientation|keyboardHidden">此處的configChanges有如下選項(xiàng): = orientation 屏幕在縱向和橫向間旋轉(zhuǎn) = keyboardHidden 鍵盤顯示或隱藏 = fontScale 用戶變更了首選的字體大小 = locale 用戶選擇了不同的語言設(shè)定 = keyboard 鍵盤類型變更,例如手機(jī)從12鍵盤切換到全鍵盤 = touchscreen或navigation 鍵盤或?qū)Ш椒绞阶兓?,一般不?huì)發(fā)生這樣的事件 =如果需要多個(gè)選項(xiàng) 用"|"隔開 此處注意:如果是在實(shí)體機(jī)上測試橫豎屏切換 需要orientation選項(xiàng) 【重點(diǎn)】如果要使得程序可以在Android模擬器上測試 需要寫o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論