2012-09-24 67 views
1

我想知道如何在我的android應用程序中完全關閉方向感應器以進行某些活動。Android方向感應器 - 完全關閉方向感應器

這是我與之奮鬥的。比方說,我使用以下命令動態地在活動的onCreate(或onStart/onResume)方法中設置方向。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

我的經驗是,屏幕出現在顯示器上明顯更快,如果我會根據方向感應器導致橫向模式的方式握持裝置。

所以感覺就好像活動首先想要按照傳感器建議的方向設置佈局,然後根據setRequestedOrientation方法進行切換。我甚至有時在屏幕上看到這個,如相關的帖子android - unexpected brief orientation change at switch of activity中所述。

看起來像是我用setRequestedOrientation調用太遲了。所以我想知道如何完全關閉方向傳感器,以避免setRequestedOrientation調用之前的方向設置。或者作爲選擇,如何及時調用setRequestedOrientation。由於我在運行時(偏好設置)動態決定需要此功能,因此無法在清單中設置固定的方向。

非常感謝這個問題的任何提示。

馬丁

編輯: 我忘了提,清單中包含

android:configChanges="keyboardHidden|orientation|screenSize" 
+1

你試過了'機器人:screenOrientation'清單屬性?請檢查http://stackoverflow.com/a/4675801/1321873也 – Rajesh

+0

thx反饋Hauleth。正如在我的問題的末尾提到的那樣:由於我在運行時(偏好設置)動態決定需要此功能,因此無法在清單中設置方向。 – dorjeduck

回答

0

對性能的影響是因爲機器人殺死你的活動,然後用新的配置開始一個新的實例。 一個很好的解決方案是手動處理配置更改。 通過 添加機器人:configChanges =「定位」到你的活動元素清單文件 重寫onConfigurationChanged方法在您的活動進行佈局

將其拖活動的另一個解決方案,一個只能在景觀另一個在通過在清單文件中指定方向屬性來顯示人像,並且適合午餐。

+0

謝謝先生我的反饋 - 我忘了提及,現在剛剛添加它,android:configChanges =「orientation」已經設置在清單 – dorjeduck

+0

事情是,根據我如何持有該設備有差別,應該如果在前面的活動和新的活動中定向都是固定的,則不是。 – dorjeduck

+0

好吧,所以在你的活動中覆蓋onConfigurationChanged方法,並應該得到性能提升,android不會殺死你的活動,而是會調用上述方法 –

0

這是你如何可以在運行時設置的方向如下

int currentOrientation = getRequestedOrientation(); 

if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
} 
else { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
} 
+0

感謝您的答案,但那不是我的問題 – dorjeduck