2011-04-06 93 views
1

在My Manifest.xml文件中,如果我的MyActivity有以下'android:configChanges',它不會在res/layout-land中選取我的佈局文件當我將手機旋轉到橫向模式時。Android沒有選擇res/layout-land中的佈局文件

<activity 
     android:name="MyActivity" 
     android:configChanges="orientation|keyboard|keyboardHidden"> 
    </activity> 

請問您能告訴我該如何解決?

謝謝。

+0

發佈您的完整清單文件... – 2011-04-06 16:52:28

回答

4

通過在configChanges中包含方向,您將禁用默認的佈局更改行爲,即以新方向重新開始您的活動。

您需要手動更改在onConfigurationChanged中獲取CONFIGURATION_LANDSCAPE/CONFIGURATION_PORTRAIT時使用的佈局。

請注意,根據the Activity docs,onConfigurationChanged是「最後的選擇」選項 - 通常更好的是保持狀態並讓系統重新啓動您的應用程序。

最良好的祝願,

菲爾Lello

4

不知道其他的Manifest或你的活動,我只能說從android:configChanges中刪除了「orientation」。這將禁用方向更改。

2

我明白想要重複的最佳實踐,但這些答案並不一定能解決問題。我也同意這些最佳做法。不幸的是,他們無法在所有情況下實踐。

我會考慮OP所說的問題是Android中的一個錯誤。說我將在這個活動中處理「configChanges」到Android意味着,如果配置發生變化,請不要終止我的活動。使用「更改」一詞並不意味着傳遞給Activity的初始配置將被Activity忽略。要麼改變措詞,要麼活動應該在原始配置中處理正確的方向。

解決方法是通過手動檢查方向手動選擇適當的佈局文件。實質上,不要在configChanges =「orientation | keyboard | keyboardHidden」的配置中使用-land bucket,則會忽略land bucket。

// done in onCreate 
int desiredLayoutId; 
int orientation = getResources().getConfiguration().orientation; 
if (orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    desiredLayoutId = R.layout.some_layout_landscape; 
} else { 
    desiredLayoutId = R.layout.some_layout_portrait; 
} 
setContentView(desiredLayoutId); 

再說一遍,我不喜歡這樣,但如果你是在「不得已而爲之」,並決定於管理自己的方向,你可以按照我提供的,以獲得適當的佈局文件中的代碼。一個可能的用例可能是在創建一個流式視頻的活動時,該視頻不應該在屏幕旋轉時卸載並重新加載。