版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙教版九年級歷史下冊月考試卷含答案
- 9詩歌賞析(出自2012至2024年連續(xù)十三年的云南省中考語文試卷及答案 20張動(dòng)態(tài)幻燈片)
- 2025年粵教新版必修1歷史上冊階段測試試卷
- 服務(wù)升級客戶合同(2篇)
- 2025年山東電子職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年安陽職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年天津生物工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年呼倫貝爾職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年吉林城市職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025至2031年中國軟瓣止回閥行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年度高端商務(wù)車輛聘用司機(jī)勞動(dòng)合同模板(專業(yè)版)4篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2025長江航道工程局招聘101人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年黑龍江哈爾濱市面向社會(huì)招聘社區(qū)工作者1598人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《妊娠期惡心嘔吐及妊娠劇吐管理指南(2024年)》解讀
- 《黑神話:悟空》跨文化傳播策略與路徑研究
- 《古希臘文明》課件
- 2025年高考語文作文滿分范文6篇
- 零售業(yè)連鎖加盟合同
- 2024年中國陪診服務(wù)行業(yè)市場發(fā)展趨勢預(yù)測報(bào)告-智研咨詢重磅發(fā)布
- AVL-CRUISE-2019-整車經(jīng)濟(jì)性動(dòng)力性分析操作指導(dǎo)書
評論
0/150
提交評論