Android没有从values文件夹中选择正确的dimens.xml文件

12

我创建了不同的dimens.xml文件,并将它们放置在相应的values文件夹中。

我定义了以下"value"文件夹:

values, values-large, values-normal, values-small, values-sw320dp, values-sw320dp-land, values-sw480dp, values-sw600dp, values-sw720dp和 values-sw720dp-land

问题是,当我将应用程序安装在5英寸及以下手机上时,Android会选择来自values-sw320dp的dimens.xml文件。此选择与屏幕密度无关。

我在S4、Moto G、S4 Mini和一些2.3设备上测试了该应用程序。结果在所有设备上都相同。

我在这里做错了什么?


请参考http://stackoverflow.com/questions/16454751/sw320dp-layout-blocks-xlarge-layout。 - Infinite Recursion
我能够通过将hdpi、xhdpi和xxhdpi附加到values-sw320dp来解决我的问题。我创建了以下文件夹:values-sw320dp-hdpi、values-sw320dp-xhdpi和values-sw320dp-xxhdpi,并添加了相应的dimens.xml文件。现在正确的尺寸被选中了。 - Arif Nadeem
太好了 :) 是的,正如那篇SO帖子中提到的那样,需要使用qualifiers - Infinite Recursion
2个回答

10

现在我清楚了,values-sw320dp 文件夹将是唯一一个从中选择 dimens.xml 文件的文件夹,因为屏幕尺寸小于或等于 5 英寸的手机属于该类别。

我犯的错误是忽略了 320dp 大小屏幕的屏幕密度。

所以我找到的解决方法是基于屏幕密度创建不同的 value 文件夹,即创建名为 values-sw320dp-ldpi、values-sw320dp-mdpi、values-sw320dp-hdpi、values-sw320dp-xhdpi 和 values-sw320dp-xxhdpi 的文件夹,并把相应的 dimens.xml 文件放入其中。

我希望这可以帮助那些遇到这个问题的人们。


4
这没有意义。屏幕尺寸和屏幕分辨率不同。你可以拥有小于5英寸的屏幕尺寸,但分辨率超过320 dp。 - Johann
@AndroidDev 请再次阅读我的问题,我问的是“当我在小于等于5英寸的手机上安装应用程序时,Android会选择来自values-sw320dp的dimens.xml。这种选择与屏幕密度无关。”我知道屏幕大小和分辨率不同,但在我的情况下,values-sw480dp配置被忽略了,原因是我的手机都没有超过xhdpi分辨率,请参见此处(ldpi(低)〜120dpi mdpi(中)〜160dpi hdpi(高)〜240dpi xhdpi(超高)〜320dpi):http://developer.android.com/guide/practices/screens_support.html - Arif Nadeem
但是我猜想,如果你使用今天的任何QHD手机,你将不得不使用480dp或640dp的配置,通过这样做,你可以未雨绸缪地为你的应用程序打好未来的基础。 - Arif Nadeem

3
我不知道你所尝试的方式出了什么问题。但是我通常会像这样创建values文件夹:values,values-ldpi,values-mdpi,values-hdpi,values-xhdpi,values-w360dp-mdpi,values-w600dp-mdpi等。 这对我总是有效的。

1
定义带有密度限定符的值文件夹会使 dp 的目的失效。 - Vishal Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接