将此图像(具有正确尺寸)插入我的 Android 项目的最佳方法是什么?
What is the best way to insert this image (with the correct dimension) into my Android project?
我绝对是 Android 开发新手,我对将 header 图像插入我的第一个应用程序的正确方法有一些疑问。
所以我有以下情况:我必须插入一个图像作为 header(图像下面有内容,经典网站 header 概念),所以我有做了这样的事情:
<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>
如您所见,我正在使用此设置来设置 header 图像:
android:background="@drawable/carbonara"
所以我使用 android:background 属性 来设置 carbonara.jpg图像作为 LinearLayout header 的背景必须水平填充屏幕(因为我已经指定:android:layout_width ="fill_parent").
好的,所以使用 android:background 设置似乎在所有屏幕上都能正常工作(这就是我所说的在 Android Studio activity 预览)因为我将图像设置为背景所以我认为它是 "stretched" 来填充 space.
但我不知道使用android:background是否正确。有人对我说最好使用:
android:src="@drawable/carbonara"
而不是 android:background 设置。是真的吗?为什么必须填写 header? (在 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" />
问题是,对于某些屏幕尺寸(或者可能还有像素密度?),现在图像没有填满整个 space
例如这是预览设置 Nexus 5 作为设备:
如你所见,右边有一个白色的space。为什么?是图片不够大还是怎么回事?
使用 android:background="@drawable/carbonara" 代替 android:src="@drawable/carbonara" 我没有这个问题,图像显示得相当不错(可能有点水平拉伸)。
在这些情况下使用 android:background 代替 android:src 真的很可怕吗?
所以我真的不知道处理这种问题的正确解决方案是什么:如果使用android:background不好有什么我要做什么?我是否需要创建具有不同大小图像的不同版本并将其放在 /res/ 文件夹的特定路径中?还是什么?我有点'糊涂了。
使用 ImageView 时 android:src 是正确的选择,因为它可以帮助您获得适合图像的正确效果。正如已经说过的,您可以使用 android:scaleType 来告诉系统您的图像应该如何显示。显示了可能的值 here
因此,如果您希望图像具有相同的宽高比但适合边界,您应该选择 center_crop,但这可能会在 top/bottom 上裁剪图像的某些部分。
关于图像大小:您可能听说过 Android 中使用的密度桶:它们的范围从 LDPI 到 XXXHDPI,与比例因子相关。您可以找到有关此 here 的更多详细信息。
您也猜对了,您应该在 *res/** 下的密度桶文件夹中提供不同解决方案中的图像。在 Nexus 5X 上,您的图像宽度应为 1080 像素以适合整个屏幕。此 phone 上使用的密度桶是 XXHDPI。您可以找到有关此指标的更多详细信息 here.
android:background 存在于所有视图中。顾名思义,这就是背景中的内容。
android:ImageViews 及其子类存在 src。您可以将其视为前景。因为 ImageView 是 View 的子类,所以你甚至有 android:background。
如果前景图像小于背景图像,则未被前景覆盖的背景部分将可见。
此外,您可以在前景中使用透明度,在这种情况下背景将是可见的(透明的)。
Is it really so horrible use android:background instead android:src
for these situations?
它与 background
和 rsc
属性无关。 Android 可在提供不同屏幕尺寸和密度 (dpi) 的各种设备上运行。您不能对 Nexus 5
和 Nexus S
使用相同的图像。
解决方法是:
您将必须根据屏幕尺寸和 dpi
制作多张图片
一组六个广义密度:
-ldpi(低)~120dpi
-mdpi(中等)~160dpi
-hdpi(高)~240dpi Nexus S
-xhdpi(超高)~320dpi Moto G
-xxhdpi(超高)~480dpi Nexus 5
-xxxhdpi(超高超高)~640dpi Galaxy
S6
和 S7
我绝对是 Android 开发新手,我对将 header 图像插入我的第一个应用程序的正确方法有一些疑问。
所以我有以下情况:我必须插入一个图像作为 header(图像下面有内容,经典网站 header 概念),所以我有做了这样的事情:
<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>
如您所见,我正在使用此设置来设置 header 图像:
android:background="@drawable/carbonara"
所以我使用 android:background 属性 来设置 carbonara.jpg图像作为 LinearLayout header 的背景必须水平填充屏幕(因为我已经指定:android:layout_width ="fill_parent").
好的,所以使用 android:background 设置似乎在所有屏幕上都能正常工作(这就是我所说的在 Android Studio activity 预览)因为我将图像设置为背景所以我认为它是 "stretched" 来填充 space.
但我不知道使用android:background是否正确。有人对我说最好使用:
android:src="@drawable/carbonara"
而不是 android:background 设置。是真的吗?为什么必须填写 header? (在 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" />
问题是,对于某些屏幕尺寸(或者可能还有像素密度?),现在图像没有填满整个 space
例如这是预览设置 Nexus 5 作为设备:
如你所见,右边有一个白色的space。为什么?是图片不够大还是怎么回事?
使用 android:background="@drawable/carbonara" 代替 android:src="@drawable/carbonara" 我没有这个问题,图像显示得相当不错(可能有点水平拉伸)。
在这些情况下使用 android:background 代替 android:src 真的很可怕吗?
所以我真的不知道处理这种问题的正确解决方案是什么:如果使用android:background不好有什么我要做什么?我是否需要创建具有不同大小图像的不同版本并将其放在 /res/ 文件夹的特定路径中?还是什么?我有点'糊涂了。
使用 ImageView 时 android:src 是正确的选择,因为它可以帮助您获得适合图像的正确效果。正如已经说过的,您可以使用 android:scaleType 来告诉系统您的图像应该如何显示。显示了可能的值 here
因此,如果您希望图像具有相同的宽高比但适合边界,您应该选择 center_crop,但这可能会在 top/bottom 上裁剪图像的某些部分。
关于图像大小:您可能听说过 Android 中使用的密度桶:它们的范围从 LDPI 到 XXXHDPI,与比例因子相关。您可以找到有关此 here 的更多详细信息。
您也猜对了,您应该在 *res/** 下的密度桶文件夹中提供不同解决方案中的图像。在 Nexus 5X 上,您的图像宽度应为 1080 像素以适合整个屏幕。此 phone 上使用的密度桶是 XXHDPI。您可以找到有关此指标的更多详细信息 here.
android:background 存在于所有视图中。顾名思义,这就是背景中的内容。
android:ImageViews 及其子类存在 src。您可以将其视为前景。因为 ImageView 是 View 的子类,所以你甚至有 android:background。
如果前景图像小于背景图像,则未被前景覆盖的背景部分将可见。
此外,您可以在前景中使用透明度,在这种情况下背景将是可见的(透明的)。
Is it really so horrible use android:background instead android:src for these situations?
它与 background
和 rsc
属性无关。 Android 可在提供不同屏幕尺寸和密度 (dpi) 的各种设备上运行。您不能对 Nexus 5
和 Nexus S
使用相同的图像。
解决方法是:
您将必须根据屏幕尺寸和 dpi
一组六个广义密度:
-ldpi(低)~120dpi
-mdpi(中等)~160dpi
-hdpi(高)~240dpi Nexus S
-xhdpi(超高)~320dpi Moto G
-xxhdpi(超高)~480dpi Nexus 5
-xxxhdpi(超高超高)~640dpi Galaxy
S6
和 S7