国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

安卓橫豎屏切換問題總結(jié)

2019-11-06 09:54:04
字體:
供稿:網(wǎng)友

如果不想讓軟件在橫豎屏之間切換:

可以通過在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.
1if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
2    Log.i("info","landscape"); // 橫屏
3}
4else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
5    Log.i("info","portrait"); // 豎屏
6}
在onConfigurationChanged()方法中也可以檢測擁有硬鍵盤的鍵盤狀態(tài)
1//檢測實體鍵盤的狀態(tài):推出或者合上   
2if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){
3   //實體鍵盤處于推出狀態(tài),在此處添加額外的處理代碼
4}
5else 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") 只橫屏顯示(android:screenOrientation="landscape")③簡單的防止重載: 在 AndroidManifest.xml中加入:android:configChanges="orientation|keyboardHidden" 在activity中重載onConfigurationChanged事件

[java] view plain copy PRint?@Override  publicvoid onConfigurationChanged(Configuration config) {  <span style="white-space:pre">  </span>super.onConfigurationChanged(config);  }  ④橫豎屏分別布局 橫豎屏分別布局的方法是:  在res下新建 layout-land 橫屏  layout-port 豎屏  然后把layout中的xml文件分別考到以上目錄,修改布局就可以了代碼中不做任何更改。 在 AndroidManifest.xml文件中的主Activity中加入 android:configChanges="orientation|keyboardHidden" 然后在主Activity中的onConfigurationChanged加入[java] view plain copy print?@Override  public void onConfigurationChanged(Configuration config) {  <span style="white-space:pre">  </span>super.onConfigurationChanged(config);    <span style="white-space:pre">  </span>if (config.orientation == Configuration.ORIENTATION_PORTRAIT){  <span style="white-space:pre">      </span>setContentView(R.layout.main); //布局  <span style="white-space:pre">      </span>tv = (TextView) findViewById(R.id.EditText01);//控件  <span style="white-space:pre">  </span>}    <span style="white-space:pre">  </span>if (config.orientation == Configuration.ORIENTATION_LANDSCAPE){  <span style="white-space:pre">      </span>setContentView(R.layout.main); //布局  <span style="white-space:pre">      </span>tv = (TextView) findViewById(R.id.EditText01);//控件  <span style="white-space:pre">  </span>}  }  
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 城市| 德安县| 丰台区| 常州市| 亚东县| 崇礼县| 沂水县| 高唐县| 深泽县| 沈阳市| 新民市| 昭平县| 奎屯市| 白山市| 大厂| 达孜县| 望都县| 安吉县| 勃利县| 永安市| 班戈县| 铜梁县| 凤阳县| 大邑县| 四平市| 吉木乃县| 桃源县| 长垣县| 尉氏县| 雷州市| 东丽区| 龙海市| 长垣县| 辉县市| 许昌市| 三门峡市| 石楼县| 张家口市| 青冈县| 南漳县| 普陀区|