Vollbild-Hintergrundbild in einer Aktivität

145

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

Vollbild-Hintergrundbild

Ich möchte dies in einem Projekt verwenden, die beste Weise , die ich bisher gefunden habe , dies zu tun ist , ein Bild mit einer großen Größe zu verwenden, setzen Sie es in ein ImageViewund verwenden Sie android: adjustViewBounds="true"die Ränder anpassen

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

Eine andere Option, an die ich gedacht habe, ist die Verwendung des Bildes in a FrameLayout, mit match_parentin widthund heightals Hintergrund ... dies streckt das Bild, aber ich denke, das Ergebnis ist nicht sehr gut.

Wie würdest du es machen?

Sergio76
quelle
3
Glauben Sie nicht, dass dies auf Hintergründen funktioniert, aber es sollte auf Bildern funktionieren. android:scaleType="centerCrop"
EGHDK

Antworten:

223

Es gibt verschiedene Möglichkeiten, dies zu tun.

Option 1:

Erstellen Sie verschiedene perfekte Bilder für verschiedene dpi und legen Sie sie in einem zugehörigen Zeichenordner ab. Dann einstellen

android:background="@drawable/your_image"

Option 2:

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

android:src="@drawable/your_image"
android:scaleType = "centerCrop"
Stinepike
quelle
2
Wo speichern Sie 'your_image'?
Atharva Johri
5
In den res-> Zeichenordnern. Es kann mehrere geben - jeder steht für eine andere Auflösung (z. B. niedrige Auflösung / hohe Auflösung). Wenn Sie nicht für jede Auflösung bestimmte Bilder haben, funktioniert jedes.
Krodmannix
5
Die Antwort ist gut. Aber ich frage mich, ob jemand die typischen Telefongrößen für jede dpi-Gruppe gefunden hat, was bei der Vorbereitung von Bildern sehr nützlich wäre. Bearbeitet: gefunden - stackoverflow.com/questions/10574363/…
Fox
7
letzte Option -> nicht
genügend
1
OOM-Fehler, wir kommen ... wenn es sich um ein großes Bild handelt, müssen Sie es je nach Bildschirmgröße vergrößern oder verkleinern! In diesem Fall müssen Sie höchstwahrscheinlich eine Bitmap über eine asynchrone Aufgabe laden.
Jonny2Plates
25

Eine andere Möglichkeit besteht darin, 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 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, keine Bilder unterschiedlicher Größe. Ich hoffe es hilft!

axplusb
quelle
3
Dies ist eine nützliche Lösung, aber denken Sie daran, die Bitmap-Verarbeitung außerhalb des Hauptthreads durchzuführen: developer.android.com/training/displaying-bitmaps/…
Kyle Ivey
19

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

Für weitere Informationen besuchen Sie diesen Link

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

Verwenden Sie den RelativeLayout- oder LinearLayout-Hintergrund, 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>
Munish Kapoor
quelle
Ich Unexpected namespace prefix "xmlns" found for tag RelativeLayout
erhalte
Das macht mein Fragment so träge. Ich kann nicht herausfinden warum.
Sermilion
Verwenden Sie den Cache oder laden Sie das Bild mit Picasso ( square.github.io/picasso ). Die Hoffnung wird Ihr Problem lösen
Munish Kapoor
7

Wie wäre es mit

android:background="@drawable/your_image"

auf dem Hauptlayout Ihrer Aktivität?

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

NoToast
quelle
7

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

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

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

Setzen Sie scaleType = "centreCrop", damit das Bild auf den Bildschirm passt und sich nicht dehnt.

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

Sie können android: alpha verwenden, um die Transparenz des Bildes einzustellen.

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

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

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

Genießen!

Jens
quelle
7

benutze das

android:background="@drawable/your_image"

in Ihrer Aktivität sehr erstes lineares oder relatives Layout.

Syed
quelle
1

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

sb_269
quelle
1

Fügen Sie android:background="@drawable/your_image"in Ihrem Relativelayout / Linearlayout Worked hinzu.

Mwongera808
quelle
0

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>
Muhammad Rehan Qadri
quelle
-1

Arbeiten. Sie sollten dies ausprobieren:

android:src="@drawable/img"

quelle
-1

three step for put background

1) Sie sollten Ihr ähnliches Bild auswählen. Beispiel: Geben Sie hier die Bildbeschreibung ein

2) Dann kopieren Sie dieses Bild in Zeichenzeichnung. Warnung: Sie sollten Typen auswählen, die für das Namensbild kurz sind.

Geben Sie hier die Bildbeschreibung ein

3) Sie gehen zu Seite xml beabsichtigt und schreiben:

android: background = "id picture" zum Beispiel meine Bild-ID ist @ drawable / download.

Geben Sie hier die Bildbeschreibung ein

Fertig.

mohammad vakili
quelle
-2

Der einfachste Weg:

Schritt 1: Öffnen Sie die Datei AndroidManifest.xml

Sie können die Datei hier sehen!

Schritt 2: Suchen android:theme="@style/AppTheme" >

Schritt 3: Wechseln Sie zu android:theme="@style/Theme.AppCompat.NoActionBar" >

Schritt 4: Fügen Sie dann ImageView & Image hinzu

Schritt 4: Das war's!

Jishnu N Krishnan
quelle