2013-01-21 78 views
0

我有一個應用程序,我重寫onConfigurationChanged,因爲我不希望活動被銷燬和重建。它工作正常。android以編程方式重新加載佈局資源

現在我希望佈局的某個部分在方向更改時進行更改。經常我會這樣做layout-land文件夾,這將工作,但現在不。即使當我改變爲風景時,縱向佈局也會保留,但顯然會重新繪製,因爲其中的項目會根據新的方向限制更改其位置。

我認爲這是因爲佈局只是重繪,但資源不是從res文件夾中重新選擇。

有什麼想法? (我不想使用setLayoutResource或類似的東西,我寧願使用更通用的解決方案)。

謝謝。

+0

在onConfigurationChanged()中發佈代碼。這樣人們將會如何加載新的佈局,並且會更容易地幫助您。 – Raj

+0

感謝您的幫助。我沒有做任何與佈局有關的事情。但我打電話super.onConfigurationChanged(newConfig);那裏。 – Rotem

回答

0

沒有onConfigurationChanged android自己重繪場景(根據方向它是setLayouResource)。

當你寫onConfigurationChanged你說你的操作系統,你將手處理所有的東西,並與onConfigurationChanged android只旋轉相應的視圖。如果要使用layout-land中的佈局,唯一的方法是調用setLayouResource(或動態移動視圖(更改其佈局參數) - 但這種方式不太好),並恢復所有數據。

+0

謝謝。我打電話超級,但它仍然沒有重新加載佈局。再次調用setLayoutResource會很麻煩,因爲我正在討論應用程序中的某個部分,它實際上是另一個Android項目的一個部件,我只想重新加載它。我無法重新加載所有內容,因爲我有一個videoview,我希望它能繼續播放。我喜歡Android簡單地旋轉VideoView而不停止任何事情的方式。 – Rotem

+0

你可以刪除你的onconfigchanges,旋轉你的設備onCreate後會被調用,並且在這個onCreate你可以使用保存的bundle恢復狀態。沒有辦法(我不知道它,我認爲這是非常不真實的)重新加載你的佈局ith新的沒有恢復你的狀態。我認爲你甚至可以保存視頻的狀態來恢復位置並從中播放。 – dilix

0

在AndroidManifest中,在活動中插入參數:android:configChanges =「orientation」。

0
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.yourlayout); 
} 

,並提供yourlayout.xml的兩個版本:layout/yourlayout.xmllayout-land/yourlayout.xml。您可以添加更多 - 針對不同的尺寸等。

不要忘記設置android:configChanges="orientation|screenSize",否則您的活動可能會重新加載。

+0

它比這更復雜,因爲我有一個VideoView,我希望在方向更改之後繼續播放,並更改佈局的其他部分。最後,我不得不重新創建每個方向更改的佈局的其他部分。不管怎麼說,還是要謝謝你 – Rotem