为 mdpi 设备自定义 dimens.xml - 如何完成?

Custom dimens.xml for mdpi devices - how it can be done?

我的应用程序有布局,在所有设备上看起来都很完美,除了具有 mdpi 屏幕命运的设备。 Activity 只是不适合在 mdpi 设备上显示。

所以我想为这些类型的设备创建特殊的 dimens.xml。 我在我的 "values" 文件夹旁边创建了 "values-mdpi" 文件夹,在其中创建了新的 dimens.xml 并为 mdpi 设备设置了维度值。

res/values/dimens.xml:

<resources>

    <dimen name="logo_block_height">100dp</dimen>

</resources>

res/values-mdpi/dimens.xml:

<resources>

    <dimen name="logo_block_height">50dp</dimen>

</resources>

以及使用该维度的 ImageView:

 <ImageView
        android:layout_width="250dp"
        android:layout_height="@dimen/logo_block_height"
        android:id="@+id/font_logo" android:adjustViewBounds="false" android:src="@drawable/bg_font_logo"
        android:layout_marginTop="20dp" android:layout_marginBottom="20dp"/>

问题是值现在适用于所有设备,不仅适用于 mdpi,还适用于 hdpi、xhdpi、xxhdpi。

我希望它像那样工作:

如何实现?

所以我只想出了一个解决方案,没有为每个屏幕密度创建值文件夹。

当至少创建了一个 "values" 个具有命运限定符的文件夹时 android 选择最适合设备屏幕命运的文件夹。 这就是为什么它为大于或小于 mdpi 的所有内容选择 "values-mdpi" 的原因。

此外,如 所说,在那种情况下使用屏幕密度限定符是没有意义的。我可以有 phone 340x480 160dpi 的内容不适合和 Tablet 1280x800 160dpi 那里有太多空闲 space.

我通过创建带有最小高度限定符的 Values 文件夹解决了这个问题。 我有一个文件夹 "values-h480dp",其中包含每个设备的最小可用高度为 480 dp 的值,并将默认值放入其中。在默认 "values" 文件夹中,我为小屏幕设备设置了值。

现在它像我需要的那样工作了:

  • 如果设备的可用高度超过 480dp - 它使用 "values-h480dp" 文件夹中的值。
  • 如果设备的可用高度小于 480dp - 它使用来自 "values" 文件夹的值。

抱歉我的英语不好,希望这对某人有所帮助。