Immagine di sfondo a schermo intero in un'attività


145

Vedo molte applicazioni che utilizzano un'immagine a schermo intero come sfondo. Questo è un esempio:

Immagine di sfondo a schermo intero

Voglio usarlo in un progetto, il modo migliore che ho trovato finora per farlo è usare un'immagine di grandi dimensioni, metterla in un ImageViewe usare android: adjustViewBounds="true"per regolare i margini

Il problema è che se uno schermo con una risoluzione molto alta, l'immagine non è all'altezza.

Un'altra opzione a cui ho pensato è usare l'immagine in a FrameLayout, con match_parentin widthe heightcome sfondo ... questo allunga l'immagine, ma penso che il risultato non sia molto buono.

Come lo faresti?


3
Non credete che funzioni sugli sfondi, ma dovrebbe funzionare sulle immagini. android:scaleType="centerCrop"
EGHDK,

Risposte:


223

Esistono diversi modi per farlo.

Opzione 1:

Crea diverse immagini perfette per diversi dpi e inseriscile nella relativa cartella di disegno. Quindi impostare

android:background="@drawable/your_image"

Opzione 2:

Aggiungi una singola immagine di grandi dimensioni. Usa FrameLayout. Come primo figlio aggiungere un ImageView. Impostare quanto segue in ImageView.

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

2
dove conservi "tuo_immagine"?
Atharva Johri,

5
Nelle cartelle res-> drawable. Possono essercene più: ciascuna indica una risoluzione diversa (es. Bassa risoluzione / alta risoluzione). Se non disponi di immagini specifiche per ciascuna risoluzione, ognuna funzionerà.
krodmannix,

5
La risposta è buona Ma mi chiedo se qualcuno abbia trovato le dimensioni tipiche del telefono per ciascun gruppo dpi, il che sarebbe abbastanza utile durante la preparazione delle immagini. Modificato: trovato - stackoverflow.com/questions/10574363/…
fox

7
ultima opzione -> memoria
insufficiente

1
Errore OOM qui arriviamo ... se si tratta di un'immagine di grandi dimensioni, dovrai ridimensionarla in base alle dimensioni dello schermo! in questo caso dovrai probabilmente caricare una bitmap tramite un'attività asincrona.
Jonny2Plates

25

Un'altra opzione è quella di aggiungere una singola immagine (non necessariamente grande) nei drawable (chiamiamola backgroung.jpg), creare un ImageView iv_background alla radice del tuo XML senza un attributo "src". Quindi nel metodo onCreate dell'attività corrispondente:

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

Nessun ritaglio, nessuna immagine di dimensioni diverse. Spero che sia d'aiuto!


3
Questa è una soluzione utile, ma ricorda di eseguire l'elaborazione bitmap dal thread principale: developer.android.com/training/displaying-bitmaps/…
Kyle Ivey,

19

Dovresti inserire le immagini di varie dimensioni nella seguente cartella

per maggiori dettagli visita questo link

  • ldpi

  • MDPI

  • hdpi

  • xhdpi

  • xxhdpi

e utilizzare lo sfondo RelativeLayout o LinearLayout invece di utilizzare ImageView come esempio seguente

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

Ricevo un errore cheUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein il

Questo rende il mio frammento così lento. Non riesco a capire perché.
Sermilion,

usa la cache o carica l'immagine con Picasso ( square.github.io/picasso ) la speranza risolverà il tuo problema
Munish Kapoor

7

Che dire

android:background="@drawable/your_image"

sul layout principale della tua attività?

In questo modo puoi anche avere immagini diverse per diverse densità dello schermo inserendole nelle res/drawable-**dpicartelle appropriate .


7

È passato un po 'di tempo da quando questo è stato pubblicato, ma questo mi ha aiutato.

È possibile utilizzare layout nidificati. Inizia con un RelativeLayout e posiziona il tuo ImageView in quello.

Imposta altezza e larghezza su match_parent per riempire lo schermo.

Imposta scaleType = "centreCrop" in modo che l'immagine si adatti allo schermo e non si allunghi.

Quindi puoi inserire qualsiasi altro layout come faresti normalmente, come il LinearLayout di seguito.

Puoi usare android: alpha per impostare la trasparenza dell'immagine.

<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

Se vuoi che la tua immagine mostri DIETRO una barra delle azioni trasparente, inserisci quanto segue nella definizione di stile del tuo tema:

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

Godere!


7

Usa questo

android:background="@drawable/your_image"

nella tua attività il primo layout lineare o relativo.


1

In linea con la risposta di NoToast, dovresti avere più versioni di "tuo_immagine" nel tuo res / drawable-ldpi, mdpi, hdpi, x-hdpi (per schermi extra-large), rimuovere match_parent e mantenere Android: AdjustViewBounds = " vero"


1

Aggiungi android:background="@drawable/your_image"all'interno del tuo Relativelayout / Linearlayout lavorato.


0

Se hai bg.png come immagine di sfondo, allora semplicemente:

<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

Lavorando. dovresti provare questo:

android:src="@drawable/img"

-1

three step for put background

1) dovresti scegliere la tua immagine simile. per esempio: inserisci qui la descrizione dell'immagine

2) Quindi copia questa immagine in un disegno. attenzione: dovresti scegliere i tipi abbreviati per il nome dell'immagine.

inserisci qui la descrizione dell'immagine

3) vai alla pagina xml Destinato e scrivi:

android: background = "id picture" ad esempio il mio id immagine è @ drawable / download.

inserisci qui la descrizione dell'immagine

finire.


-2

La via più facile:

Passaggio 1: apri il file AndroidManifest.xml

Puoi vedere il file qui!

Passaggio 2: individuare android:theme="@style/AppTheme" >

Passaggio 3: passare a android:theme="@style/Theme.AppCompat.NoActionBar" >

Passaggio 4: quindi aggiungere ImageView e Image

Passaggio 4: tutto qui!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.