3

我试图理解一些事情。我看到的一件奇怪的事情是,当我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应该将视图包装到内容大小,那么为什么它在屏幕上更大?

4

5 回答 5

5

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

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

2)然后您可以使用wrap_contentaslayout_widthlayout_height,并且图像像素将匹配设备像素,而不会因为 dpi 放大。

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

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

于 2012-12-14T08:49:17.400 回答
4

支持多个屏幕的一个非常好的解释在

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

您需要在缩放后将图像放在相应的文件夹中。

例如,如果你想要 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

于 2012-08-19T16:29:53.677 回答
1

wrap_content意味着您想要图像的原始大小。即如果图像的大小是200*200,那么它将显示200*200,如果图像大小是400*400,它将显示400*400 的大小。因此,您获得更大图像的原因是您使用真实像素对其进行硬编码时实际获得的图像是因为图像的 LARGE SIZE。即图像实际上很大。

于 2012-08-19T17:07:43.243 回答
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 文档:


您可以使用精确的测量值指定宽度和高度,但您可能不想经常这样做。更常见的是,您将使用以下常量之一来设置宽度或高度:

wrap_content告诉您的视图将自身调整到其内容所需的尺寸

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

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


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

于 2012-08-19T16:07:30.353 回答
0

你需要看看你把图像放在哪里。如果它在 hdpi 中,它在屏幕上看起来会更大,然后如果它在 hdpi 中,则在使用 wrap_content 时。因此,为了使其具有准确的大小,请将其放入正确的库中。

于 2012-08-19T16:30:08.390 回答