我想了解一些事情。我看到的一个奇怪的事情是,当我将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
应该将视图包装到内容大小中,为什么它在屏幕上更大?
答案 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_width
和layout_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。所以,为了使它成为确切的大小,请将其放入正确的库中。