繁体   English   中英

屏幕高度为640 dp的xxhdpi设备使用xhdpi而不是h640dp-xhdpi

[英]xxhdpi devices with the screen height of 640 dp use xhdpi rather than h640dp-xhdpi

我在以下文件夹中有资源:

价值观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>

价值观MDPI

<?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,最小宽度为360 dp。 (1920 * 1080 px = 640 * 360 dp)。

Android如何找到最匹配资源的流程图:

Android如何找到最匹配资源的流程图


我的配置限定符名称应按以下顺序检查(请参阅表2. 此处的 配置限定符名称 ):

  • 最小宽度;
  • 可用高度;
  • 屏幕像素密度(dpi)。

让我们检查smallestWidth并消除与设备配置相矛盾的资源:

价值观xhdpi

价值观MDPI

价值观sw600dp

价值观h640dp-xhdpi。


让我们检查可用高度并消除与设备配置相矛盾的资源:

价值观xhdpi

价值观MDPI

价值观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"/>

但是,当我在Nexus 5上运行我的应用程序时,它使用来自values-xhdpi的资源。 为什么?

在此输入图像描述


更新#1

这是我错的地方:

让我们检查可用高度并消除与设备配置相矛盾的资源:

价值观xhdpi

价值观MDPI

价值观h640dp-xhdpi。

价值观h640dp-xhdpi消除因矛盾(见答案这就解释了为什么),和值,MDPI价值观xhdpi留下。 Nexus 5的密度为xxhdpi,但没有为xxhdpi指定资源。 因此,最佳匹配将是较小屏幕的资源,xhdpi。

支持多个屏幕

具体来说,当根据大小限定符选择资源时,如果没有更好匹配的资源,系统将使用为小于当前屏幕的屏幕设计的资源(例如,如果没有匹配的大小屏幕,则系统将使用正常大小的屏幕资源必要)。 但是,如果唯一可用的资源大于当前屏幕,则系统将不使用它们,如果没有其他资源与设备配置匹配,则应用程序将崩溃

在文档中我们可以看到

当您的应用程序为此配置提供具有不同值的多个资源目录时,系统将使用最接近( 不超过 )设备当前屏幕高度的值。

Nexus 5屏幕高度为567,但你的身高是640,这就是Android排除此文件夹的原因。

Nexus 5是: - 445 ppi像素密度

三星Galaxy Nexus I9250: - 316 ppi像素密度

这就是为什么它使用来自value-xhdpi的资源。

值-h640dp-xhdpi - 三星Galaxy Nexus I9250

value-xhdpi - Nexus 5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM