0

我想有根據設備的2種不同的方向性模式 - 如果設備屏幕超大,方向應該是景觀,如果設備屏幕較小,方向應該是肖像Android 3.2的摩托羅拉Xoom的取向變化

我已經做以下檢查:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //Set orientation for tablets and phones 
    if (isXLarge()) {  
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } else {  
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

    setContentView(R.layout.activity_main); 
} 

該活動的清單項:

<activity 
    android:configChanges="keyboardHidden" 
    android:launchMode="singleTop" 
    android:theme="@android:style/Theme.NoTitleBar" 
    android:name=".MyActivity"/> 

它可以在手機上正常,但是在摩托羅拉XOOM平板電腦採用Android 3.2這不能正常工作。

如果我們假設平板是身體保持在縱向模式下,以下動作順序發生:創建

  1. 活動,並在縱向模式顯示 - 這是直觀地顯示了半秒
  2. 活動在橫向模式下被銷燬並重新創建。

問題是,平板電腦目前在物理上保持的方向始終存在中間過渡,並且在此之後活動以所需的方向重新創建。

謝謝你對這個問題的任何信息或建議,並請告訴我,如果你需要更多的細節。

方法isXLarge()正確返回顯示器的類型

回答

1

如果你正在處理你自己,然後更好的方法來做到這一點的方向變化是在活動的艙單申報android:configChanges="orientation"和覆蓋方法。在你的情況下,你在onCreate()方法中設置方向,但如果用戶在物理上改變方向,系統將改變方向。

我建議你重寫並實現你的代碼以提供正確的方向。

+0

你能解釋一下嗎?我不想自己處理方向,直到我絕對必須 - 我只需要在XLarge屏幕中固定LANDSCAPE方向,並在較小的屏幕上固定PORTRAIT方向。 – middlehut

+1

因此,如果我理解正確,您希望以橫向模式顯示您的應用程序,儘管XLarge屏幕在物理上保持了哪個方向。在這種情況下,如果您不覆蓋'onConfigurationChanged()'方法,則每次更改物理方向時,您的活動都將被銷燬並重新創建。這意味着每次發生這種情況時都必須保存數據/狀態。從你的問題我懷疑這可能是爲什麼它被破壞和重新創建的原因。 – Gan

+0

在我看來,我沒有足夠的技巧來理解你的意思,我不能用你的答案作爲解決問題的指導。所以我會投票+1,並繼續考慮另一個解決方案... – middlehut

相關問題