2011-09-26 33 views
2

我想在啓動時設置子活動的方向。方向必須在運行時而不是XML中設置。所以我把它的代碼放在onCreate()中。我也有如何在佈局/繪圖發生之前更改屏幕方向?

android:configChanges="orientation|screenSize" 

在清單中的活動。但是當活動開始時,它首先以錯誤的方向繪製屏幕,​​然後進行更改。我如何消除這種情緒?

它與這個線程有點相關:how to define the screen orientation before the activity is created?。另外,我知道我的活動只開始一次,因爲我正在處理配置更改。

這是我在的onCreate代碼:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
orientation = sharedPref.getString("orientation_pref", "Auto"); 
setOrientation(orientation); 

setContentView(R.layout.grid); 

出於某種原因,它加載R.layout文件後,它改變了方向。

回答

0

在您的Android清單XML簡單地定義方向

<activity android:name=".MyActivity" 
      android:screenOrientation="portrait"> 

如果你是活動之間移動,你就得到應有到閃爍,這個XML屬性添加到您的活動

android:launchMode="singleTask" 

嘗試使用onCreate中的用戶pref設置setContentView

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
boolean portrait = prefs.getBoolean(KEY_ORIENTATION, true); 
if (portrait) { 
    setContentView(R.layout.myactivity); 
else { 
    setContentView(R.layout-land.myactivity); 
} 
+0

我無法在XML中執行此操作,因爲它是由用戶設置的偏愛。它閃爍是因爲它首先在主屏幕方向進行佈局,然後切換到用戶指定的任何位置。我希望它跳過第一個佈局。 –

+0

嘗試一個如果然後與用戶pref在oncreate爲setContentView並手動將其設置爲土地或肖像xml。我在答案中添加了代碼。 –

+1

我不是指佈局文件,我的意思是它實際上是在切換到橫向之前在肖像中繪製屏幕。他們都使用相同的layout.xml文件。我把代碼設置爲setContentView之前的方向,由於某種原因,它設置了它在繪製視圖之後的方向。 –