【问题标题】:Custom dimens.xml for mdpi devices - how it can be done?用于 mdpi 设备的自定义 dimens.xml - 如何完成?
【发布时间】:2015-03-22 19:38:21
【问题描述】:

我的应用程序有布局,在所有设备上看起来都很完美,除了具有 mdpi 屏幕命运的设备。活动只是不适合 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。

我希望它像这样工作:

  • 如果设备屏幕命运为 mdpi 或更低 - 使用 values-mdpi 文件夹中的值

  • 如果设备屏幕命运大于 mdpi - 使用默认的“值”文件夹。

如何实现?

【问题讨论】:

  • 我建议您以其他方式解决您的问题。对可绘制对象以外的任何内容使用密度限定符(例如-mdpi)不太可能满足您的需求。
  • 您也必须在values 文件夹中添加一个dimens.xml。使用默认值。
  • @DerGolem 当然,我的“值”文件夹中有它。
  • 它对我有用。但我添加了所有密度文件夹。所以,values-ldpi、values-mdpi、values-hdpi、....
  • @udenfox 请提供复制示例代码。当您在dimens.xml 中指定dip 值时,当然密度之间应该没有差异。

标签: android layout screen


【解决方案1】:

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

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

另外,就像ataulm 所说,在这种情况下使用屏幕密度限定符是没有意义的。我可以拥有 340x480 和 160dpi 的手机,其中内容不适合,而平板电脑 1280x800 和 160dpi,但可用空间过多。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多