将此图像(具有正确的尺寸)插入我的Android项目的最佳方法是什么?

时间:2016-06-26 09:29:39

标签: java android android-layout android-imageview android-image

我在Android开发方面绝对是新手,我对将标题图片插入第一个应用程序的正确方法存有疑问。

所以我有以下情况:我必须插入一个图像作为标题(一个immage,下面有内容,经典的网站标题概念),所以我做了类似的事情:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="0dp">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:scaleType="fitStart"
        android:layout_height="250dp"
        android:background="@drawable/carbonara" />
        <!--
        android:src="@drawable/carbonara"/>
        android:background="@drawable/carbonara" />
        -->


    <TextView android:id="@android:id/text1"
        style="@style/pastaTitleTextStyle" />


</LinearLayout>

如您所见,我正在使用此设置来设置标题图像:

android:background="@drawable/carbonara"

所以我使用 android:background 属性将 carbonara.jpg 图像设置为必须水平的 LinearLayout 标题的背景填满屏幕(因为我已指定: android:layout_width =&#34; fill_parent&#34; )。

好的,所以使用 android:background 设置似乎在所有屏幕上工作正常(这就是我说在Android Studio活动预览中更改设备),因为我将图像设置为背景,所以我认为它是&#34;拉伸&#34;填补空间。

但我不知道是否使用 android:background 是正确的选择。有人对我说最好用:

android:src="@drawable/carbonara"

而不是 android:background 设置。这是真的吗?为什么如果它是一个必须填充的标题? (在HTML \ CSS中,很常见的是使用background-image属性在布局中执行此类操作...)

所以我试着改变做法:

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="fill_parent"
    android:scaleType="fitStart"
    android:layout_height="250dp"
    android:src="@drawable/carbonara" />

问题在于,现在图像不会填满整个空间以获得某些屏幕尺寸(或者也可能是像素密度?)

例如,这是预览设置 Nexus 5 作为设备:

enter image description here

正如您所见,右侧有一个空白区域。为什么?这个屏幕的图像不是很大吗?或者是什么?

使用 android:background =&#34; @ drawable / carbonara&#34; 代替 android:src =&#34; @ drawable / carbonara&#34; I没有这个问题,它以相当不错的方式显示的图像(可能是水平伸展的痘痘)。

对于这些情况,使用 android:background 代替 android:src 真的太可怕了吗?

所以我真的不知道处理这类问题的正确解决办法是什么:如果使用 android:background 并不好我有什么办法?我是否要创建具有不同大小的图像的不同版本并将其放在 / res / 文件夹的特定路径中?或者是什么?我有点困惑。

3 个答案:

答案 0 :(得分:2)

  

使用android是非常可怕的:背景而不是android:src   对于这些情况?

它与backgroundrsc属性无关。 Android可在各种设备上运行,这些设备提供不同的屏幕尺寸和密度(dpi)。您无法为Nexus 5Nexus S使用相同的图片。

解决方案是: 您必须根据屏幕尺寸和dpi

制作多个图像

一组六个广义密度:

-ldpi(低)~120dpi
-mdpi(中)~160dpi
-hdpi(高)~240dpi Nexus S
-xhdpi(超高)~320dpi Moto G
-xxhdpi(extra-extra-high)~480dpi Nexus 5
-xxxhdpi(extra-extra-extra-high)~640dpi Galaxy S6S7

了解更多Supporting Multiple Screens

答案 1 :(得分:1)

使用ImageView时,android:src是正确的选择,因为它可以帮助您获得适合您图像的效果。如前所述,您可以使用android:scaleType告诉系统应该如何显示图像。可能的值显示为here
因此,如果您希望图像具有相同的宽高比但适合边界,则应选择 center_crop ,但这可能会在顶部/底部裁剪图像的某些部分。 关于图像大小:您可能听说过Android中使用的密度桶:它们的范围从LDPI到XXXHDPI,它们与比例因子相关联。您可以找到有关此here的更多详细信息。 你也猜对了,你应该在* res / **下的密度桶文件夹中提供不同解决方案中的图像。在Nexus 5X上,您的图像宽度应为1080像素,以适应整个屏幕。此手机使用的密度桶为XXHDPI。您可以找到有关此指标的更多详细信息here

答案 2 :(得分:1)

android:所有视图都存在背景。顾名思义,这就是背景中的情况。

android:src存在于ImageViews及其子类中。您可以将此视为前景。因为ImageView是View的子类,所以你甚至可以使用android:background。

如果前景图像小于背景图像,则前景未覆盖的背景部分将可见。

此外,您可以在前景中使用透明度,在这种情况下,背景将是可见的(透明)。