2010-05-06 4 views
36

Sto provando a impostare l'elemento LinearLayout di root (impostato su fill_parent in entrambe le dimensioni) per avere un'immagine di sfondo che si trova sempre nell'angolo in basso a sinistra dello schermo, indipendentemente dall'orientamento del dispositivo . Sarebbe eccellente se ci fosse un modo per impostare la posizione dell'immagine di sfondo come quella che si può fare con css usando "background-position: left bottom;" ma non sto vedendo un modo per ottenere questo in Android. C'è un modo per fare questo?Inserimento di un'immagine di sfondo

Grazie per l'aiuto.

risposta

78

Dovrete creare un drawable bitmap personalizzata con il bitmap in un file XML (ad esempio "res/drawable/my_drawable.xml"

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/my_png_file" 
    android:gravity="bottom|left" /> 

E poi impostare questo xml drawable come sfondo del vostro vista ("@ drawables/my_drawable") Il formato XML drawable è molto scarsamente documentato nel sito Android, quindi non è sicuramente un problema facile capire come risolvere da soli

+0

Come posso riferirmi a quel bitmap XML in un altro XML? – mr5

+0

Nello stesso modo in cui ti riferisci a qualsiasi altro drawable - nel mio esempio, se lo chiamavi 'my_drawable.xml', sarebbe stato referenziato come' @ drawable/my_drawable' in qualsiasi posto puoi fare riferimento a qualsiasi altro tipo di drawable (come 'android: background,' android: drawableLeft' su una textview, ecc.) –

+0

non ci sono cartelle res/drawable. Se si tenta di crearlo, si verifica un errore. Ho creato una cartella xml e l'ho messa lì e l'errore è stato corretto – user2070775

9

Se trovato un vantaggio facendo questo in modo programmatico: l'immagine si adatta al layout invece di essere più grande di esso. Nessuna ideia perché.

Il codice:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
       R.drawable.image); 
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); 
bitmapDrawable.setGravity(Gravity.BOTTOM|Gravity.RIGHT); 
LinearLayout layout = (LinearLayout) findViewById(R.id.background_root); 
layout.setBackgroundDrawable(bitmapDrawable); 
+0

Un altro vantaggio è che può essere applicato a molte viste cambiando solo l'immagine – Onimusha

0

avvolgere il vostro LinearLayout in un RelativeLayout e aggiungere un ImageView ad esso. Usando android: layout_alignParentBottom e android: layout_alignParentLeft puoi mettere la tua immagine in basso a sinistra.

<RelativeLayout 
    android:id="@+id/relativeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:src="@drawable/my_image" /> 

    <LinearLayout 
     android:id="@+id/linearLayout" 
     ... > 

Assicurarsi che ImageView sia il primo elemento di RelativeLayout per disegnare l'immagine in background.

0

La mia risposta è solo un aggiornamento di risposte di cui sopra Se si utilizza XML per lo sfondo, che può verificarsi problema in proporzioni

in modo da utilizzare questo codice

Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
       R.drawable.image); 
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); 
    bitmapDrawable.setGravity(Gravity.BOTTOM| Gravity.RIGHT| Gravity.FILL_HORIZONTAL); 
LinearLayout layout = (LinearLayout) findViewById(R.id.background_root); 
layout.setBackgroundDrawable(bitmapDrawable); 

Gravity.Fill_HORIZONTAL si adatta con larghezza del layout su cui stai applicando lo sfondo puoi menzionarlo anche nel file XML ma come ho detto potrebbe verificarsi il problema del rapporto immagine