2010-05-06 11 views
36

Estoy intentando establecer mi elemento LinearLayout raíz (que está configurado en fill_parent en ambas dimensiones) para tener una imagen de fondo que siempre se encuentra en la esquina inferior izquierda de la pantalla sin importar la orientación del dispositivo . Sería excelente si hubiera alguna forma de establecer la posición de la imagen de fondo, como la que puede hacer con css usando "background-position: left bottom;" pero no veo una manera de lograr esto en Android. ¿Hay alguna forma de hacer esto?Ubicación de la imagen de fondo

Gracias por la ayuda.

Respuesta

78

Vas a tener que crear un mapa de bits personalizado estirable con su mapa de bits en un archivo XML (por ejemplo, "res/dibujables/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" /> 

y después fijar esta xml estirable como fondo de su vista ("@ drawables/my_drawable"). El formato XML dibujable está muy poco documentado en el sitio de Android, por lo que definitivamente no es un problema fácil de resolver por su cuenta.

+0

¿Cómo puedo hacer referencia a ese mapa de bits XML en otro XML? – mr5

+0

De la misma forma en que se referiría a cualquier otro dibujable: en mi ejemplo, si lo llamara 'my_drawable.xml' se lo referenciaría como' @ drawable/my_drawable' en cualquier lugar donde pueda hacer referencia a cualquier otro tipo de dibujable (como 'android: background,' android: drawableLeft' en una vista de texto, etc.) –

+0

no hay carpeta res/drawables. Si intentas crearlo, ocurre un error. Creé una carpeta xml y la puse allí y se corrigió el error – user2070775

9

Si se encuentra una ventaja haciendo esto programáticamente: la imagen se ajusta al diseño en lugar de ser más grande que. No ideia why.

El código:

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

Otra ventaja de esto es que se puede aplicar a muchas vistas cambiando solo la imagen – Onimusha

0

envolver su LinearLayout en un RelativeLayout y añade una ImageView a ella. Usando android: layout_alignParentBottom y android: layout_alignParentLeft puedes poner tu imagen en la esquina inferior izquierda.

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

Asegúrese de que ImageView sea el primer elemento de RelativeLayout que dibuje la imagen en segundo plano.

0

Mi respuesta es sólo una actualización de las respuestas anteriores Si utiliza XML para el fondo, puede producirse un problema en la relación de aspecto

a fin de utilizar este código

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 encajará con ancho de diseño en el que está aplicando fondo también puede mencionar esto en el archivo XML, pero como he dicho, se producirá el problema de la relación de imagen