2009-09-11 115 views
65

有沒有辦法讓應用程序完全忽略屏幕方向更改?如何使應用程序忽略屏幕方向更改?

+0

只是一個注意事項,顯然在Android 1.5中有一個錯誤。如果您使用自定義屏幕大小(例如800x480,就像在Apad上)並強制它橫向(通過XML或代碼),那麼它實際上將是縱向的。 – Dornbi 2010-10-01 09:04:54

+0

你可以從https://github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/delight/android/baselib/Screen.java調用'Screen.lockOrientation(this)'if你想鎖定和解鎖代碼的方向(這是更靈活) – caw 2015-03-04 18:33:09

回答

58

當鍵盤打開/關閉時,很容易覆蓋默認行爲並禁止屏幕方向更改。

修改清單

打開清單,切換到應用程序選項卡,選擇您希望重寫的方向改變行爲所需的活動。

  1. 中的屬性,你需要改變兩個領域: 屏幕方向:選擇縱向或橫向 - 取其所需。這將是默認佈局。

  2. 選擇您希望覆蓋的配置更改事件: 在這種情況下,這些是鍵盤隱藏和方向。

修改活動實施

現在,你需要重寫所需的活動範圍內的單一功能。

只需將下面的函數添加到您的活動的類。

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

這是如果使用Source->Override/Implement Methods 菜單選項的默認實現。

就是這樣!現在你的方向將始終保持。

請記住,此設置是針對每個活動的 - 因此您需要爲每個您希望禁止方向更改的活動重複此步驟!

(基於SDK 1.1)

+16

不簡單地調用通過超類沒有改變任何東西? – Matthias 2009-09-11 13:05:09

+0

呃..我剛剛給了一個適合我的配方。 – 2009-09-11 13:50:26

+10

我只是玩弄了一些非常相似的東西 - 我認爲Manifest文件的變化已經足夠了,至少它們對我來說(這似乎是合乎邏輯的,正如Matthias指出的那樣)。 – 2009-09-11 16:28:19

26

您可以在代碼中使用以下行(稱爲活動)相同的變化:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

一旦你撥打這個電話,你的應用程序將保持在橫向(或縱向)模式下。您可以使用相同的調用(使用不同的ActivityInfo枚舉),以使其對再次移動的方向敏感。

關於這個話題的完整的DevX文章有Developing Orientation-Aware Android Applications

(警告:因爲我已經張貼此鏈接DevX搭起了一個註冊牆)

+0

這是我用Android 2.2工作的唯一答案。謝謝! – 2010-09-10 03:45:16

14

您可以在AndroidManifest.xml文件中像這樣定義你的活動:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="portrait" 
    android:configChanges="orientation|keyboardHidden|keyboard"/>` 

在這種情況下,你應該爲每個活動設置屬性。我沒有找到所有應用程序的內聯解決方案。

19

如果您正在設置AndroidManifest.xmlsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);,您將遇到與平板電腦有關的問題。他們的自然/默認取向是風景。

如果你真的想完全忽略屏幕方向改變我會用這個setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);值。我在Stack中詳細討論它 溢出問題Android natural sensor orientation help

這裏是XML:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="nosensor" 
    android:configChanges="orientation|keyboardHidden|keyboard"/> 
+0

這不會旋轉屏幕。 – 2015-05-21 12:37:35

+1

我不知道我跟着...這是關鍵,避免旋轉屏幕。 – bytebender 2015-05-27 17:18:20

+0

「完全忽略屏幕方向更改」表示旋轉時,數據將保持不變。 – 2015-05-27 19:54:38

2
<activity android:screenOrientation="portrait"></activity> 
1

您想閱讀的當前方向,並保持它在所有活動的一生就這樣,所以我所做的是下面的,在的onCreate結束:

// choose an orientation and stay in it 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
2

一下添加到活動:

android:configChanges="orientation|screenSize"