布局文件未使用Nexus 5X / 6 / 6P仿真器的正确维度值文件

时间:2016-07-10 21:02:03

标签: android

我有一个简单的布局文件,其中一个TextView(用于测试)。我试图根据所选设备在适当的值文件中根据dimen的值更改文本的大小。 除了Nexus 5X / 6 / 6P 之外,我可以将其用于Android Studio中的所有设备。

我们以Nexus 6为例。
1440 x 2560 - 560dpi
560dpi是xxhdpi设备(x3)
所以将分辨率除以3得到480 x 853
该设备的最小宽度为480。

我有以下值文件夹:
sw320dp
sw480dp
sw600dp
sw720dp
sw800dp

实际上,我有5个这样的,每个密度为mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi。

我已在布局中设置textSize的{​​{1}}属性,以使用TextView的{​​{1}} dimen在所提到的每个不同尺寸文件中存在不同的值上方。

打开此布局文件时,显示正在使用值/ dimen,值显示为30,恰好是my values-sw320dp-hdpi 文件夹中的值。

除非我完全遗漏某些东西,否则这是完全错误的。 应该使用values-sw480dp-xxhdpi文件夹中的myTextValue

为了使事情进一步复杂化,即使我可以告诉它使用了哪个dimen文件,对该文件进行更改也不会对布局产生任何影响,就像它无法对它做任何事情/不是使用它。

这仅适用于Android Studio中上面提到的3个设备,而且只发生在我的5个原始布局文件和我创建的任何新文件中。我有4个其他布局文件“看起来”正如我所期望的那样工作。

这让我发疯,所以如果有人有任何建议,我会非常感激。感谢

2 个答案:

答案 0 :(得分:0)

这是对我的疏忽。 “似乎”无法正常工作的三个设备都在寻找一个sw320dp-xxxhdpi值文件,当一个不存在时(我的情况),它只是使用匹配最好的,但随后对任何其他值文件进行更改没有影响,这是有道理的。

答案 1 :(得分:0)

从我看到的结果来看,android使用的是在较大文件夹中找到的尺寸,该尺寸小于或等于设备dp分辨率。因此,公平地说,它只是从小于或等于设备dp分辨率的最大dimen文件夹迭代到默认文件夹,而根据我的判断,它不涉及任何“匹配”,它使用阈值,从而非常快速,非常容易地预测哪个值将被实际使用。

values | sw220dp | sw320dp | sw360dp | sw480dp | sw600dp | ...etc
.................................|device resolution DP

屏幕分辨率和大小以及其他一些设置为设备提供了dp分辨率,例如380 x 640 dp,因此它比480小,因此它检查的第一个文件夹为360->朝向默认设置(首先找到它)。尽管有缩放比例设置可用于缩放布局和使用的sp dimens,但大部分情况下您还是无法控制设备使用的dp分辨率。

要查找设备dp,请使用以下命令:

val width = resources.configuration.screenWidthDp
val height = resources.configuration.screenHeightDp