2016-01-06 228 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

好吧,我已经有了大地。根据截图,你认为我需要添加什么? –