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

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

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

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

<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 header 的背景填满屏幕(因为我指定了:android:layout_width="fill_parent")。

好的,所以使用 android:background 设置似乎在所有屏幕上都能正常工作(这就是我所说的在 Android Studio Activity 预览中更改设备),因为我将图像设置为背景,所以我认为它被“拉伸(stretch)”以填充空间。

但我不知道使用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="@drawable/carbonara" 代替 android:src="@drawable/carbonara" 我没有这个问题,它显示的图像以一种相当不错的方式(可能有点水平拉伸(stretch))。

在这些情况下使用 android:background 而不是 android:src 真的很糟糕吗?

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

最佳答案

Is it really so horrible use android:background instead android:src for these situations?

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

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

制作多张图片

一组六个广义密度:

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

阅读更多 Supporting Multiple Screens

关于java - 将此图像(具有正确尺寸)插入我的 Android 项目的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037044/

相关文章:

android - 有什么方法可以在多个 Activity 后面运行后台线程并在完成时显示警报?

android - Android WebView 中输入字段的默认操作

android - 使用 TabHost 时如何消除像素错误

java - 没有引用或无法找到引用导致的不确定错误 - java.lang.IndexOutOfBoundsException

android - AppBar 在滚动时隐藏 View 直到折叠

java - 为什么java认为这个方法是被声明的,而不是被调用的?

java - 为什么我必须使用 for 循环而不是 foreach 循环?

java - 自定义 Circlular seek arc 以将位图放置在给定的进度级别

java - FrameGrabber 空指针异常

java - 如何为64位Linux机器编译Hadoop?