2012-02-03 118 views
1

我在我的佈局,正常的土地和佈局正常端口文件夾替代佈局和他們是根據我是否在啓動裝置保持在陸地或端口被系統正確調用。我的問題是,當我在啓動應用程序後旋轉設備時,它試圖以某種方式將已顯示的視圖適應新的情況,造成一團糟。 如何告訴系統在執行過程中應該切換到備用佈局?設備的方向變化並沒有改變佈局

一直在試驗四周,發現當我不要有機器人:configChanges =「keyboardHidden |定位」,在OnCreate被再次調用,這給了正確的佈局,但它不是我想要擁有的。我不認爲這是正常的,是嗎?也許是Android(2.3.3。)中的bug問題?

+0

應自動切換基於取向變化的XML佈局,但如果你對測試它的設備沒有一個「正常」的屏幕,它會跳過這兩個佈局。 – 2012-02-03 21:42:55

回答

7

通過包括

android:configChanges="orientation" 
在您的清單

你說你要處理的方向改變自己。如果您希望系統爲您處理它,您應該將其刪除。

自動處理工作非常好。如果您有特定的理由,您應該只重寫它。

在正常操作中(沒有上述清單項),取向開關將使當前活動被關閉,然後在新的方向重新加載的所有資源和佈局從當前活動的資源文件夾重新打開。該過程遵循所謂的「Activity Lifecycle」。

如果您包含上述清單條目,您會說:「我將自己處理所有更改。請勿關閉我的活動」,因此您有責任從活動中刪除所有不需要的佈局,並將其替換爲佈局您現在需要了解當前的方向。

+0

我現在刪除了它,但是我得到了在每次設備輪換時調用的oncreate。這不是我想要的。你有什麼建議? – michaelsmith 2012-02-06 14:24:54

+0

你不能兩面都有。您必須讓系統處理方向更改,或者您自己處理它們。看起來你還沒有理解Android的基本生命週期。在嘗試其他任何事情之前,您應該確保您瞭解這一點.http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle方向更改關閉您的活動並重新啓動它,以便onCreate方法是必需的。另一種方法是手動更改新尺寸的活動佈局。不是一件容易的事。 – Kuffs 2012-02-06 14:31:35

+0

我開始明白了。重新啓動我的活動不是一個選項,所以我需要做一個onConfigurationChanged。是否允許在該方法中執行setContentView?我曾嘗試過,但它崩潰 – michaelsmith 2012-02-06 15:06:35

0

你在那個活動的清單有android:configChanges="orientation"?這將阻止android自動更改您的佈局。

+0

我在我的清單中有這個。我也有orientationChangeListener,我做了一個新的setContentView,導致崩潰:「你只能在MapActivity中使用一個MapView」。我有正確的佈局文件夾。仍然是同樣的問題... – michaelsmith 2012-02-04 16:05:22

0

可能是顯而易見的,但是:

  1. 的資源文件夾內,確保您在文件夾標記爲「佈局」和「佈局的土地。」
  2. 縱向和橫向.xml文件必須具有相同的文件名。
+0

我有文件夾佈局(沒有主要。xml)和layout-land和layout-port(都使用main.xml)。 xml在啓動時被正確調用,問題是當我在執行期間更改設備方向時 – michaelsmith 2012-02-04 16:18:37