为什么wrap_content比实际像素大小更大?

时间:2012-08-19 15:58:33

标签: android imageview pixel

我想了解一些事情。我看到的一个奇怪的事情是,当我将wrap_content放在宽度和高度时,图像大于插入的图像的实际px(像素)大小。为什么会这样?

我的代码wrap_content

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="false"
    android:src="@drawable/header" />

这就是我的代码具有图像的精确像素大小:

 <ImageView
    android:id="@+id/imageView1"
    android:layout_width="378px"
    android:layout_height="155px"
    android:adjustViewBounds="false"
    android:src="@drawable/header" />

如您所见,那就是确切的像素大小:

为什么?我认为wrap_content应该将视图包装到内容大小中,为什么它在屏幕上更大?

5 个答案:

答案 0 :(得分:4)

提供了支持多屏幕的非常好的解释

http://developer.android.com/guide/practices/screens_support.html

缩放后需要将图像放在各自的文件夹中。

e.g。如果您想要100 * 100图像,请放置

75*75 in drawable-ldpi for Low density devices

100*100 in drawable-mdpi for Medium density devices

150*150 in drawable-hdpi for High density devices

200*200 in drawable-xhdpi for Extra High density devices

答案 1 :(得分:4)

如果您确实需要按原样使用图像的像素,并使用屏幕实际像素,请执行以下操作:

1)创建一个res/drawable-nodpi并在那里移动固定像素的非缩放图像。

2)然后,您可以将wrap_content用作layout_widthlayout_height,图片像素将匹配设备像素,而不会因为dpi而升级。

来自http://developer.android.com/guide/practices/screens_support.html,nodpi的定义:

所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放用此限定符标记的资源。

答案 2 :(得分:1)

wrap_content表示您希望图像与原始尺寸一样。即如果图像尺寸为200 * 200则显示200 * 200,如果图像尺寸为400 * 400,则显示尺寸为400 * 400。 因此,当您使用真实像素对其进行硬编码时,您获得更大图像的原因是因为图像的大尺寸。即图像实际上很大。

答案 3 :(得分:0)

根据我的经验,我可以说wrap_content总是尽可能利用最大可用尺寸。所以有时它会拉伸图像和有时会减小图像的大小。要使用精确图像,请使用android:scaleType="fitXY"

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="false"
    android:scaleType="fitXY"
    android:src="@drawable/header" />

在第2条评论后更新:

根据android docs:


您可以使用精确测量指定宽度和高度,但您可能不希望经常这样做。更常见的情况是,您将使用其中一个常量来设置宽度或高度:

wrap_content 告诉您的视图将自身大小添加到其内容所需的维度

fill_parent (在API级别8中重命名为match_parent)告诉您的视图变得与其父视图组允许的视图一样大。

通常,不建议使用像素等绝对单位指定布局宽度和高度。相反,使用相对测量(如与密度无关的像素单位(dp),wrap_content或fill_parent)是一种更好的方法,因为它有助于确保应用程序在各种设备屏幕大小上正确显示。可接受的测量类型在可用资源文档中定义。


我发现大小本身一词很重要,它会自动调整图像的大小。这就是为什么我告诉我,根据我的经验,我发现有时它会拉伸图像和有时会缩小图像的大小

答案 4 :(得分:0)

您需要查看放置图像的位置。如果它在hdpi中它将在屏幕上看起来更大,那么如果它在hdpi时正在使用wrap_content。所以,为了使它成为确切的大小,请将其放入正确的库中。