如何将android位图别名为另一个尺寸的drawable(drawable-large-mdpi别名为drawable-hdpi)

Posted

技术标签:

【中文标题】如何将android位图别名为另一个尺寸的drawable(drawable-large-mdpi别名为drawable-hdpi)【英文标题】:How can I alias an android bitmap to a drawable from another size (drawable-large-mdpi aliases to drawable-hdpi) 【发布时间】:2011-06-30 03:23:55 【问题描述】:

我正在努力为我的应用添加对平板电脑大小的屏幕的支持。我已经有适用于不同密度屏幕的 drawable-mdpi 和 drawable-hdpi 图像。我的问题是像 Galaxy 7 这样的平板电脑,它是一个“大”屏幕,但仍然是中等密度。我的部分布局在屏幕宽度上有 5 个均匀分布的按钮。在带有 mdpi 图形的大屏幕上,虽然图像非常小,它们之间有大量空白。

我想为大布局使用更大的图形,以使它们看起来合适,并利用屏幕空间。我的 hdpi 目录中有一些可以完美运行的双倍大小的图形。作为测试,我已将 /res/drawable-hdpi 中的所有图像复制到 /res/drawable-large-mdpi 中,一切看起来都如我所愿。

但是,我不想通过处理所有这些图像来膨胀我的应用程序的大小。我想为它们中的每一个创建别名,以便在请求 /res/drawable-large-mdpi/button_0 时,它实际上会使用 /res/drawable-hdpi/button_0 。

我尝试创建一个 xml 位图,但我不知道如何从特定目录引用可绘制对象。有什么帮助吗?

/res/drawable-large-mdpi/button_0.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable-hdpi/button_0" />

我得到的错误是:

error: Error: No resource found that matches the given name (at 'src' with value '@drawable-hdpi/button_0_highlighted').

【问题讨论】:

嗨,肯尼,你是怎么解决这个问题的??????。我有同样的problem请帮帮我 我永远无法使用别名。我只需要将所有图像复制到 drawable-large-mdpi 目录中。 【参考方案1】:

将您的按钮资源移动到drawable-nodpi 文件夹并将其重命名为button_0_hdpi.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/button_0" />

当使用 XML 别名时,您不能指定限定符。你有@drawable-hdpi,它只需要@drawable。您可能还需要在按钮位图的原始位置创建第二个 XML 别名。

这里有一篇关于方法http://blog.evendanan.net/2011/03/Android-resources-and-device-fragmentation的好文章

【讨论】:

有空的时候,我会试试看! 我自己刚刚解决了这个问题,来这里是为了寻找更好的方法,这里是一样的。赞成 IMO 这应该是公认的答案,因为考虑了 OP 的要求:使用别名来解决问题【参考方案2】:

this page 讨论了您可以在资源文件夹上使用的不同修饰符。这似乎表明优先顺序是屏幕尺寸(小,中,大,xlarge)高于密度(ldpi,mdpi,hdpi)。我认为这意味着如果您将 drawables-hdpi 文件夹重命名为 drawables-large-hdpi,即使 Galaxy 选项卡具有中等密度,它仍将使用该文件夹中的可绘制对象,因为它有一个大屏幕。

编辑:我刚刚对此进行了测试,它确实以一种方式解决了您的问题。它们在 drawables-large-hdpi 文件夹中生成图像,以便在运行应用程序时显示在 Galaxy 选项卡上。但不幸的是,添加大限定符使得它们不会出现在具有 hdpi 密度的中型屏幕上。如果您想获得此功能,您可能需要创建单独的文件夹并拥有 2 个大型资源的副本 =(.

【讨论】:

这是一个有趣的想法,我肯定会记住这一点,以备将来的问题使用,但我肯定想找到一种方法将整个目录或目录中的单个可绘制对象别名为另一个具有特定修饰符的目录。 感谢您的更新。我将给它几天的其他答案,但如果没有其他人有解决方案,我会接受这个。 您确定 Galaxy Tab 被视为 mdpi 设备吗?我正在玩一些我正在开发的应用程序的资源,默认情况下它从 drawable-hdpi 文件夹中获取它的可绘制对象。根据银河标签的***页面,它有 260 dpi。根据此页面上的图表:developer.android.com/guide/practices/screens_support.html hdpi 开始于 200dpi 左右。你确定你的星系正在从你的 mdpi 文件夹中获取图像吗? 我正在使用模拟器,但当然模拟器使用的是我设置的任何密度。我发现一些网页给出的密度不正确(我应该看看***)。问题仍然存在于爱可视 10.1。我有一个用户联系我们并向我们发送了一个屏幕截图,它看起来与我的大屏幕完全一样,但 mdpi 模拟器。在 large-mdpi 文件夹中提供较大的图像(hdpi 图像的副本)时,它似乎可以工作......但当然这是在模拟器中。我将不得不做更多的研究并弄清楚发生了什么。感谢您的帮助。 Galaxy 选项卡被记录为 HDPI 设备,并且在运行时也会返回此类设备。您可以在 Google 官方帖子中阅读所有相关信息:goo.gl/qQupA 它也被定义为“大型”设备——与 Xoom(即 xlarge-mdpi)相比,它也被定义为“large-hdpi”。

以上是关于如何将android位图别名为另一个尺寸的drawable(drawable-large-mdpi别名为drawable-hdpi)的主要内容,如果未能解决你的问题,请参考以下文章

Android 小部件位图大小

将 System.Drawing 位图转换为 Dlib Array2D

Android - 在将位图保存到 SDCARD 以获取结果之前压缩位图

使用“com.android.camera.action.CROP”意图裁剪图像,在某些设备上返回小尺寸位图

如何获取图像文件的尺寸?

Android:我们可以在应用程序运行时创建带有字符串的位图吗?