安卓图片尺寸

5
我正在开始学习Android开发,关于支持不同屏幕尺寸有几个问题需要解决。我已经在这里阅读了所有相关信息:http://developer.android.com/guide/practices/screens_support.html 但仍然不知道如何为不同的屏幕使用不同大小的图像。因为我的三星Infuse 4G和Galaxy 10.1平板电脑具有相同的密度级别,所以我已经将一个图像放置在res/drawable/hdpi中,并且在这两个设备上运行时会被选取。由于它们具有相同的密度级别,因此该图像在两个设备上的物理大小大致相同。这就是问题所在,显然我希望在平板电脑上看到更大的图像,但我还没有找到方法。

我看了另一种分类,包括小型、中型和大型,但似乎仅适用于布局而非图像资源。

如果您能提供任何指导,将不胜感激。

谢谢!


1
“小型,中型和大型似乎只适用于布局” - 这并不正确。您也可以将它们应用于图像资源。 - Vit Khudenko
它不是res/drawable/hdpi,应该是res/drawable-hdpi。 - Guillaume
谢谢Arhimed,我甚至没有想到过。我在读的所有地方都只是与布局一起使用。 - danca
3个回答

7
这两个设备的像素密度不同。三星Infuse是hdpi,Galaxy Tab 10.1是mdpi。
此外,通常情况下你不想在平板电脑上放大图像。考虑一下——如果我在我的应用程序中有一个联系人列表,我希望它们在手机和平板电脑上的高度相同,因为没有必要使它们更高(这个高度足以显示文本并能用手指轻触它),而我想要做的是利用额外的空间来显示更多的联系人。
如果你真的想要在平板电脑上放大图片,你需要解释更多关于你实际想要实现的内容。例如,也许这是一个背景图片?在这种情况下,也许你要做的就是让图片拉伸到填满屏幕。(请注意,在Android上处理背景图片很棘手,因为你需要处理各种不同大小的屏幕。为了避免让自己发疯,背景图片通常应该非常抽象,这样拉伸效果会好。看看Android 3.0和4.0中默认主题使用的背景图片作为例子。)
如果你正在编写游戏,那么这是一个非常不同的世界,你应该考虑是否要使用基于像素密度的资源。通常情况下,游戏将拥有独立于像素密度的资源,并且只需将其游戏场地填满屏幕,就可以得到在平板电脑上更大的结果。

谢谢你的回答。是的,我应该更详细地解释一下。我想做一个简单的数独益智游戏,而且我希望在大屏幕上放大棋盘。让安卓自动缩放会有问题,因为我无法知道边框有多大,而我需要计算哪个单元格被点击了。 就像你说的,要考虑的组合太多了。我在想,也许我可以使用设备的尺寸在代码中绘制棋盘,而不是将其作为PNG图像。 - danca
1
只需将您的PNG图像设置为“-nodpi”并缩放以适应屏幕即可。话虽如此,您需要自己定制布局或绘制(任选其一)顶部的内容,以便按相同比例缩放以与板对齐。 - hackbod
@hackbod,我有关于游戏开发段落的问题。你是指nodpi文件夹还是其他什么技巧?我在这个主题上缺乏经验,问一个问题可能会导致被downvote和关闭为过于宽泛或离题。 - Leos Literak

1

将图片放入例如

/res/layout-480x800` - if you know resolution
/res/layout-w480dp - if you know witdh
/res/layout-h800dp - if you know height

Android会自动为您选择图片。只需将具有相同名称但分辨率不同的图片放入此子文件夹中。然后只需使用(无需指定限定符):

android:src="@drawable/background"

或者

imageView.setImageResource(R.drawable.background);

限定符的优先级顺序可以在文档(表2)中找到。


很酷。似乎有很多方法可以组织您的资源。如果设备配置有多个类似匹配项,您如何知道哪个会被选中? - danca
好问题,我找到了答案并编辑了我的帖子。优先级在这里显示:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources - damienix
它真的起作用吗?布局是针对 XML 文件的,但 PNG 构建失败。 - Leos Literak
你尝试过点击上面的链接吗?你也可以对drawable目录进行同样的操作。 - damienix

0

平板电脑通常是xhdpi,而不是hdpi。因此,对于您的三星Infuse,请将图像放置在以下位置:

/res/drawable-hdpi/

对于平板电脑,请将其放置在:

/res/drawable-xhdpi

当通过设置图像资源时

android:src="@drawable/image"

或者

imageView.setImageResource(R.drawable.image);

它将根据设备的密度选择适当的图像。


嗨Nick。对我来说问题在于我想根据屏幕尺寸而不是密度使用不同的资源。我想我可以使用res/drawable-[small | medium | large]。 - danca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接