Imagen de fondo de pantalla completa en una actividad


145

Veo muchas aplicaciones que usan una imagen de pantalla completa como fondo. Esto es un ejemplo:

Imagen de fondo de pantalla completa

Quiero usar esto en un proyecto, la mejor manera que he encontrado hasta ahora para hacerlo es usar una imagen de gran tamaño, ponerla ImageViewy usarla android: adjustViewBounds="true"para ajustar los márgenes

El problema es que si una pantalla con una resolución muy alta, la imagen se queda corta.

Otra opción pensé es utilizar la imagen en una FrameLayout, con match_parent, en widthy heightcomo fondo ... esto estira la imagen, pero creo que el resultado no es muy bueno.

¿Como lo harias?


3
No crea que esto funciona en fondos, pero debería funcionar en imágenes. android:scaleType="centerCrop"
EGHDK

Respuestas:


223

Hay varias formas de hacerlo.

Opción 1:

Cree diferentes imágenes perfectas para diferentes ppp y colóquelas en una carpeta dibujable relacionada. Luego establecer

android:background="@drawable/your_image"

Opcion 2:

Agrega una sola imagen grande. Use FrameLayout. Como primer hijo agregue un ImageView. Establezca lo siguiente en su ImageView.

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

2
¿Dónde guardas 'your_image'?
Atharva Johri

55
En las carpetas res-> dibujables. Puede haber múltiples: cada soporte para una resolución diferente (ej. Baja resolución / alta resolución). Si no tiene imágenes específicas para cada resolución, cualquiera funcionará.
krodmannix

55
La respuesta es buena Pero me pregunto si alguien encontró los tamaños de teléfono típicos para cada grupo de dpi, lo que sería bastante útil al preparar imágenes. Editado: encontrado - stackoverflow.com/questions/10574363/...
Fox

77
última opción -> sin memoria: D
ternes3

1
OOM error aquí venimos ... si es una imagen grande, ¡necesitarás escalarla según el tamaño de la pantalla! en este caso, lo más probable es que deba cargar un mapa de bits mediante una tarea asincrónica.
Jonny2Plates

25

Otra opción es agregar una sola imagen (no necesariamente grande) en los elementos dibujables (por ejemplo, backgroung.jpg), crear un ImageView iv_background en la raíz de su xml sin un atributo "src". Luego, en el método onCreate de la actividad correspondiente:

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

Sin recortes, no hay muchas imágenes de diferentes tamaños. ¡Espero eso ayude!


3
Esta es una solución útil, pero recuerde hacer el procesamiento de mapa de bits fuera del hilo principal: developer.android.com/training/displaying-bitmaps/…
Kyle Ivey

19

Debe colocar las imágenes de varios tamaños en la carpeta siguiente

para más detalles visite este enlace

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

y use el fondo RelativeLayout o LinearLayout en lugar de usar ImageView como ejemplo siguiente

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

Recibo un error queUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein

Esto hace que mi Fragmento sea tan lento. No puedo entender por qué.
Sermilion

use el caché o cargue la imagen con picasso ( square.github.io/picasso ) espero que resuelva su problema
Munish Kapoor

7

Qué pasa

android:background="@drawable/your_image"

en el diseño principal de su actividad?

De esta manera, también puede tener diferentes imágenes para diferentes densidades de pantalla colocándolas en las res/drawable-**dpicarpetas apropiadas .


7

Ha pasado un tiempo desde que esto fue publicado, pero esto me ayudó.

Puede usar diseños anidados. Comience con un RelativeLayout y coloque su ImageView en eso.

Establezca la altura y el ancho en match_parent para llenar la pantalla.

Establezca scaleType = "centreCrop" para que la imagen se ajuste a la pantalla y no se estire.

Luego puede colocar cualquier otro diseño como lo haría normalmente, como el diseño lineal a continuación.

Puede usar android: alpha para establecer la transparencia de la imagen.

<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

Si desea que su imagen se muestre DETRÁS de una barra de acción transparente, ponga lo siguiente en la definición de estilo de su tema:

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

¡Disfrutar!


7

utilizar este

android:background="@drawable/your_image"

en su actividad, primer diseño lineal o relativo.


1

En líneas con la respuesta de NoToast, necesitaría tener múltiples versiones de "your_image" en su res / drawable-ldpi, mdpi, hdpi, x-hdpi (para pantallas grandes xtra), elimine match_parent y mantenga Android: ajusteViewBounds = " cierto"


1

Agregue android:background="@drawable/your_image"dentro de su Relativelayout / Linearlayout Worked.


0

Si tiene bg.png como imagen de fondo, simplemente:

<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

Trabajando. deberías probar esto:

android:src="@drawable/img"


-2

La forma más fácil:

Paso 1: abra el archivo AndroidManifest.xml

¡Puedes ver el archivo aquí!

Paso 2: localizar android:theme="@style/AppTheme" >

Paso 3: cambia a android:theme="@style/Theme.AppCompat.NoActionBar" >

Paso 4: luego agrega ImageView & Image

Paso 4: ¡Eso es!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.