2011-08-16 106 views
0

我想簡單地改變setlayout當我旋轉我的設備,以便我可以有一個適合Android設備的當前方向的特定活動的視圖佈局,但我很困惑有關實現此目的的最佳方法。如何在方向更改時處理佈局更改?

我已經提到了以下的Android DOC:

Handling Runtime Changes

我並不需要保存從我的活動的任何數據,所以不要認爲我真的需要使用onRetainNonConfigurationInstance()方法。我嘗試通過onConfigurationChanged()方法自己處理方向更改,在那裏我找到當前的方向,然後根據需要設置佈局,但這會導致視圖不再有效。在onConfigurationchanged()中還需要做些什麼嗎?

感謝

回答

2

要獲得景觀有不同的看法,而不是肖像,你把你的佈局XML文件在以下兩個資源文件夾:

/RES /佈局 - 肖像

/res/layout-land - Landscape

這當然,如果你在兩個視圖中都有相同的視圖,否則你可能會得到一些NullPointerException異常。

1

在你的項目res文件夾中你應該有一個佈局文件夾。在res中創建一個新文件夾並將其命名爲layout-land。現在創建第二組專用於橫向設備的layout.xml文件。將它們保存在這個layout-land文件夾中。系統將爲您處理剩下的事情。

check out this page並向下滾動到「提供Alernative資源」,以獲取有關可在res文件夾中使用的不同限定符的更多詳細信息。

編輯:你使用什麼設備?我創建了一個快速測試項目,它不過是hello world,但顯示了res/layout-land文件夾中存儲的佈局中的不同文本。 我在清單中試過一次,並且一次沒有configChanges="orientation"。當我運行應用程序並切換方向時,佈局的行爲與預期相同。當設備處於橫向時,將顯示來自佈局域的佈局,並且當設備處於縱向時,將顯示來自普通佈局文件夾的佈局。

我測試的設備是Sidekick 4g。 Download the test project並且如果您喜歡,請回報它如何在您的設備上運行。

+0

謝謝你們,可惜它似乎並不奏效。在方向改變時,它只保留舊的佈局。順便說一句,沒有新的觀點被添加和非被刪除,只是重新定位。我必須在清單中包含configChanges =「orientation」,因爲我不希望我的活動重新啓動,這就是爲什麼我沒有看到期望的結果? – Kerry

+0

你在用什麼設備,看我的編輯。 – FoamyGuy

+0

謝謝蒂姆。我嘗試了它,因爲你最初編碼,它確實工作。不過,我意識到它可以工作,因爲Android處理方向更改。在我自己的應用程序中,當方向更改時我重寫Android,因爲我不希望該Activity重新啓動。感謝您的幫助。 – Kerry

2

您可以在名爲「res \ layout-land」的資源下創建一個新目錄,在同名的「res \ layout」和「res \ layout-land」中創建一個.xml佈局文件。例如:「myLayout.xml」。 Android將自動使用landland目錄中的佈局,而另一個則是縱向佈局。