2016-01-06 231 views
2

我過去在爲不同佈局優化我的應用時遇到了麻煩。有人告訴我,normal目錄將覆蓋large-land目錄,奇怪的是它是真的,所以我刪除了normal目錄。不同的屏幕尺寸?

enter image description here

將任何其他佈局覆蓋對方?我已將每個佈局放入這些文件夾中的每一個文件夾中,並進行了適當的編輯(花了我一個多星期的時間!),因此您在圖片中看到的每個目錄都有多個XML資源文件夾。我需要做其他事情來優化我的應用程序的所有佈局嗎?我已經添加了以下在我的清單:

<supports-screens 
     android:anyDensity="true" 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="true" 
     android:xlargeScreens="true" /> 

回答

1

我不建議您刪除正常的目錄,因爲它總是作爲默認之一。

正常的目錄的效用,是當系統無法找到與您的設備相匹配的目錄中的XML文件,所以它會採取默認的XML(一種在正常的目錄)。

如果您忘記添加一個(或多個)屏幕尺寸/方向目錄,這將會很有用。


這是一個例子:

假設你的設備屬於xlarge類別。

方案1:

你有這些個XML:

(1) res/layout/my_layout.xml    // layout for normal screen size ("default") 
(2) res/layout-xlarge/my_layout.xml  // layout for extra-large screen size 
(3) res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation 
  • 在橫向模式下,Android將尋找在res/layout-xlarge-land目錄中的XML =>目錄中存在,它包含my_layout.xml所以它確定,它會採取這一個。

  • 在縱向模式下,Android將查找XML在res/layout-xlarge-port目錄=>目錄丟失,所以它會尋找在res/layout-xlarge的XML =>目錄中存在,它包含my_layout.xml所以它的好,它會這個。

方案2:(不layout-xlarge目錄)

你有這些個XML:

(1) res/layout/my_layout.xml    // layout for normal screen size ("default") 
(3) res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation 
  • 在橫向模式下,Android將查找XML在res/layout-xlarge-land目錄=>目錄存在,它包含my_layout.xml所以它的確定,它將採取這一個。

  • 在縱向模式下,Android將查找XML在res/layout-xlarge-port目錄=>目錄丟失,所以它會尋找XML在res/layout-xlarge =>它也不見了,因此它會尋找在XML中res/layout = >目錄存在,它包含my_layout.xml所以它的確定,它會採取這一個。


瞭解更多詳細看看official documentation,在 「使用配置預選賽」 部分:

+0

嘿拉米,感謝詳細的解答。事情是,我有佈局'res/layout-xlarge'。那麼問題是什麼?我也有'res/layout-xlarge-land'(看看我的問題中的截圖)。它正在'xlarge-land'上採取'正常'... –

+0

不客氣!你確定你的設備屬於'xlarge'類別嗎?除了屏幕截圖中的佈局目錄(layout-xhdpi for exp),您的項目中沒有其他佈局目錄?那麼肖像模式呢,它是否需要'res/layout-xlarge'中的佈局或'res/layout'中的佈局(正常)? – Rami

+0

好吧,我已經有了大地。根據截圖,你認爲我需要添加什麼? –