活动中的全屏背景图片


145

我看到许多应用程序使用全屏图像作为背景。这是一个例子:

全屏背景图片

我想在项目中使用它,到目前为止,我发现最好的方法是使用大尺寸的图像,将其放在中ImageView并用于android: adjustViewBounds="true"调整边距

问题是,如果屏幕的分辨率很高,则图像不足。

我想到的另一种选择是在FrameLayoutmatch_parentin widthheight作为背景中使用图像...这会拉伸图像,但我认为结果不是很好。

你会怎么做?


3
不要相信这适用于背景,但是适用于图像。android:scaleType="centerCrop"
EGHDK

Answers:


223

有几种方法可以做到。

选项1:

为不同的dpi创建不同的完美图像并将它们放置在相关的可绘制文件夹中。然后设置

android:background="@drawable/your_image"

选项2:

添加单个大图像。使用FrameLayout。作为第一个孩子,添加一个ImageView。在ImageView中设置以下内容。

android:src="@drawable/your_image"
android:scaleType = "centerCrop"

2
您将“ your_image”存储在哪里?
Atharva Johri 2014年

5
在res-> drawable文件夹中。可能有多个-每个代表不同的分辨率(例如,低分辨率/高分辨率)。如果没有每种分辨率的特定图像,则任何一种都可以使用。
krodmannix

5
答案是好的。但是我想知道是否有人找到每个dpi组的典型电话尺寸,这在准备图像时会非常有用。编辑:发现-stackoverflow.com/questions/10574363/…–
狐狸

7
最后一个选项->内存
不足

1
这里出现OOM错误...如果图像较大,您将需要根据屏幕尺寸放大或缩小!在这种情况下,您很可能需要通过异步任务加载位图。
Jonny2Plates 2014年

25

另一种选择是在可绘制对象中添加单个图像(不一定大)(将其命名为backgroung.jpg),在xml的根目录下创建一个ImageView iv_background,而没有“ src”属性。然后在相应活动的onCreate方法中:

    /* create a full screen window */
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.your_activity);

    /* adapt the image to the size of the display */
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
      getResources(),R.drawable.background),size.x,size.y,true);

    /* fill the background ImageView with the resized image */
    ImageView iv_background = (ImageView) findViewById(R.id.iv_background);
    iv_background.setImageBitmap(bmp);

没有裁剪,没有许多不同大小的图像。希望能帮助到你!


3
这是一个有用的解决方案,但记得要做到位主线程的处理掉:developer.android.com/training/displaying-bitmaps/...
凯尔艾维

19

您应该将各种尺寸的图像放入以下文件夹

有关更多详细信息,请访问此链接

  • 分辨率

  • 分辨率

  • 分辨率

  • xhdpi

  • xxhdpi

并使用RelativeLayout或LinearLayout背景,而不是使用ImageView作为示例

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:background="@drawable/your_image">

</RelativeLayout>

我遇到一个错误Unexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein 2014年

这使我的片段太迟了。不知道为什么。
Sermilion'9

使用缓存或将图片与picasso(square.github.io/picasso)配合使用希望能解决您的问题
Munish Kapoor

7

关于什么

android:background="@drawable/your_image"

您的活动的主要布局?

这样,通过将它们放置在适当的res/drawable-**dpi文件夹中,还可以针对不同的屏幕密度使用不同的图像。


7

自发布以来已经有一段时间了,但这对我有所帮助。

您可以使用嵌套布局。从RelativeLayout开始,然后将ImageView放在其中。

将高度和宽度设置为match_parent来填充屏幕。

设置scaleType =“ centreCrop”,使图像适合屏幕且不会拉伸。

然后,您可以像平常一样放置其他任何布局,例如下面的LinearLayout。

您可以使用android:alpha设置图像的透明度。

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/image"
    android:alpha="0.6"/>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello"/>

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="There"/>

   </LinearLayout>
</RelativeLayout>

7

如果要让图像在透明的操作栏后面显示,请在主题的样式定义中添加以下内容:

<item name="android:windowActionBarOverlay">true</item>

请享用!


7

用这个

android:background="@drawable/your_image"

在您的活动中,首先是线性或相对布局。


1

按照NoToast的回答,您需要在res / drawable-ldpi,mdpi,hdpi,x-hdpi(适用于Xtra大屏幕)中具有多个版本的“ your_image”,删除match_parent并保留android:AdjustViewBounds =“真正”


1

android:background="@drawable/your_image"在您已完成的相对布局/线性布局中添加。


0

如果您将bg.png作为背景图片,则只需:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"/>
</RelativeLayout>

-1

加工。您应该尝试一下:

android:src="@drawable/img"


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.