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?

Sergio76
fuente
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"
stinepike
fuente
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!

axplusb
fuente
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>
Munish Kapoor
fuente
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 .

Tostada
fuente
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>
pitufo
fuente
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!

Jens
fuente
7

utilizar este

android:background="@drawable/your_image"

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

Syed
fuente
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"

sb_269
fuente
1

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

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

Trabajando. deberías probar esto:

android:src="@drawable/img"

fuente
-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!

Jishnu N Krishnan
fuente