我在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 作为设备:
正如您所见,右侧有一个空白区域。为什么?这个屏幕的图像不是很大吗?或者是什么?
使用 android:background =&#34; @ drawable / carbonara&#34; 代替 android:src =&#34; @ drawable / carbonara&#34; I没有这个问题,它以相当不错的方式显示的图像(可能是水平伸展的痘痘)。
对于这些情况,使用 android:background 代替 android:src 真的太可怕了吗?
所以我真的不知道处理这类问题的正确解决办法是什么:如果使用 android:background 并不好我有什么办法?我是否要创建具有不同大小的图像的不同版本并将其放在 / res / 文件夹的特定路径中?或者是什么?我有点困惑。
答案 0 :(得分:2)
使用android是非常可怕的:背景而不是android:src 对于这些情况?
它与background
和rsc
属性无关。 Android可在各种设备上运行,这些设备提供不同的屏幕尺寸和密度(dpi)。您无法为Nexus 5
和Nexus 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
S6
和S7
答案 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。
如果前景图像小于背景图像,则前景未覆盖的背景部分将可见。
此外,您可以在前景中使用透明度,在这种情况下,背景将是可见的(透明)。