我在以下文件夹中有资源:
XHDPI值
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="test_str">values-xhdpi</string>
<style name="test">
<item name="android:background">#aaaaff</item>
</style>
</resources>
价值观
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="test_str">values-mdpi</string>
<style name="test">
<item name="android:background">#ffaaaa</item>
</style>
</resources>
值-SW600DP
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="test_str">values-sw600dp</string>
<style name="test">
<item name="android:background">#aaffaa</item>
</style>
</resources>
值-H640DP-XHDPI
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="test_str">values-h640dp-xhdpi</string>
<style name="test">
<item name="android:background">#cacaca</item>
</style>
</resources>
我在nexus 5上运行了一个包含这些资源的测试应用程序。屏幕密度为xxhdpi,最小宽度为360dp。(1920*1080像素=640*360 dp)。
Android如何找到最佳匹配资源的流程图:
我的配置限定符名称应按以下顺序检查(见表2)。配置限定符名称:
最小宽度;
有效高度;
屏幕像素密度(dpi)。
让我们检查smallestwidth并消除与设备配置冲突的资源:
XHDPI值
价值观
值-SW600DP
值-H640DP-XHDPI。
让我们检查可用高度并消除与设备配置相矛盾的资源:
XHDPI值
价值观
值-H640DP-XHDPI。
所以现在
values-h640dp-xhdpi
是唯一剩下的资源文件夹。让我向您展示如何应用资源:<TextView
style="@style/test"
android:text="@string/test_str"
android:textSize="46sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
但是,当我在Nexus5上运行我的应用程序时,它使用
values-xhdpi
中的资源。为什么?here
更新第1号
这就是我错的地方:
让我们检查可用的高度并消除
与设备配置冲突:
XHDPI值
价值观
值-H640DP-XHDPI。
values-h640dp-xhdpi由于一个矛盾而被消除(请参见解释原因),并保留值mdpi和值xhdpi。nexus 5的密度是xxhdpi,但没有为xxhdpi指定资源。因此,最好的匹配是一个较小屏幕的资源,xhdpi。
the answer
具体来说,当基于大小限定符选择资源时,
系统将使用为小于
当前屏幕如果没有更好匹配的资源
例如,如果
必要的)。但是,如果仅有的可用资源大于
在当前屏幕上,系统将不使用它们和您的应用程序
如果没有其他资源与设备配置匹配,则将崩溃
最佳答案
在文档中我们可以看到
当应用程序提供多个资源目录时
对于此配置,系统使用不同的值
最接近(但不超过)设备当前屏幕高度的。
Nexus5的屏幕高度是567,但是你的高度是640,这就是为什么Android排除了这个文件夹。
关于android - 屏幕高度为640 dp的xxhdpi设备使用xhdpi而不是h640dp-xhdpi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32048286/