it-swarm.com.de

Vollbild Hintergrundbild in einer Aktivität

Ich sehe viele Anwendungen, die ein Vollbild als Hintergrund verwenden. Dies ist ein Beispiel:

Full screen background image

Ich möchte dies in einem Projekt verwenden. Das Beste, was ich bisher gefunden habe, ist, ein Bild mit einer großen Größe zu verwenden, es in ein ImageView zu setzen und Android: adjustViewBounds="true" zu verwenden, um das anzupassen Ränder

Das Problem ist, dass bei einem Bildschirm mit einer sehr hohen Auflösung das Bild zu kurz kommt.

Eine andere Option, die ich mir überlegt habe, ist, das Bild in einem FrameLayout mit match_parent in width und height als Hintergrund zu verwenden ... das streckt das Bild, aber ich denke das Ergebnis ist nicht sehr gut.

Wie würdest du es machen?

138
Sergio76

Es gibt verschiedene Möglichkeiten, dies zu tun.

Option 1:

Erstellen Sie verschiedene perfekte Bilder für verschiedene dpi und legen Sie sie in den entsprechenden Zeichenordner. Dann setzen

Android:background="@drawable/your_image

Option 2:

Fügen Sie ein einzelnes großes Bild hinzu. Verwenden Sie FrameLayout. Fügen Sie als erstes Kind ein ImageView hinzu. Stellen Sie in Ihrer ImageView Folgendes ein.

Android:src="@drawable/your_image"
Android:scaleType = "centerCrop"
213
stinepike

Eine andere Möglichkeit ist, ein einzelnes Bild (nicht unbedingt groß) in die Drawables einzufügen (nennen wir es backgroung.jpg) und ein ImageView iv_background im Stammverzeichnis Ihrer XML-Datei ohne das Attribut "src" zu erstellen. Dann in der onCreate-Methode der entsprechenden Aktivität:

    /* 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);

Kein Zuschneiden, nicht viele unterschiedlich große Bilder. Ich hoffe es hilft!

25
axplusb

Sie sollten die Bilder in verschiedenen Größen in den folgenden Ordner legen

für weitere Informationen besuchen Sie diese Link

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

verwenden Sie den Hintergrund RelativeLayout oder LinearLayout, anstatt ImageView als folgendes Beispiel zu verwenden

<?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>
18
Munish Kapoor

Wie wäre es mit

Android:background="@drawable/your_image"

auf dem Hauptplan Ihrer Aktivität?

Auf diese Weise können Sie auch unterschiedliche Bilder für unterschiedliche Bildschirmdichten erstellen, indem Sie sie in den entsprechenden Ordnern res/drawable-**dpi ablegen.

7
NoToast

benutze das

Android:background="@drawable/your_image

in Ihrer Tätigkeit allererste lineare oder relative Anordnung.

6
Syed

Wenn Ihr Bild HINTER einer transparenten Aktionsleiste angezeigt werden soll, fügen Sie Folgendes in die Stildefinition Ihres Designs ein:

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

Genießen!

6
Jens

Es ist schon eine Weile her, dass dies gepostet wurde, aber das hat mir geholfen.

Sie können verschachtelte Layouts verwenden. Beginnen Sie mit einem RelativeLayout und platzieren Sie Ihre ImageView darin.

Stellen Sie Höhe und Breite auf match_parent ein, um den Bildschirm auszufüllen.

Stellen Sie scaleType = "centreCrop" ein, damit das Bild auf den Bildschirm passt und nicht gedehnt wird.

Dann können Sie wie gewohnt andere Layouts einfügen, wie das unten stehende LinearLayout.

Mit Android: alpha können Sie die Transparenz des Bildes einstellen.

<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>
5
smurph

Füge Android:background="@drawable/your_image" in dein Relativelayout/Linearlayout Worked ein.

1
Mwongera808

In Übereinstimmung mit der Antwort von NoToast müssten Sie in Ihrem res/drawable-ldpi, mdpi, hdpi, x-hdpi (für xtra große Bildschirme) mehrere Versionen von "your_image" haben remove match_parent und behalte Android: adjustViewBounds = "true"

1
sb_269

Wenn Sie bg.png als Hintergrundbild haben, dann einfach:

<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>