156 votes

Image de fond en plein écran dans une activité

Je vois de nombreuses applications qui utilisent une image plein écran comme arrière-plan. En voici un exemple :

Full screen background image

Je veux l'utiliser dans un projet. La meilleure façon de procéder que j'ai trouvée jusqu'à présent est d'utiliser une image de grande taille, de la placer dans un fichier de type ImageView et utiliser android: adjustViewBounds="true" pour ajuster les marges

Le problème est que sur un écran à très haute résolution, l'image n'est pas à la hauteur.

Une autre option à laquelle j'ai pensé est d'utiliser l'image dans une FrameLayout avec match_parent sur width et height comme fond... cela étire l'image, mais je pense que le résultat n'est pas très bon.

Je peux demander comment vous le feriez ?

Merci d'avance Regrads

3 votes

Je ne crois pas que cela fonctionne sur les arrière-plans, mais cela devrait fonctionner sur les images. android:scaleType="centerCrop"

234voto

StinePike Points 20501

Vous pouvez le faire de plusieurs façons.

Option 1 :

Créez différentes images parfaites pour différents ppp et placez-les dans le dossier dessiné correspondant. Ensuite, définissez

android:background="@drawable/your_image

Option 2 :

Ajoutez une seule grande image. Utilisez FrameLayout. Comme premier enfant, ajoutez un ImageView . Définissez les éléments suivants dans votre ImageView.

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

2 votes

Où stockez-vous 'votre_image' ?

5 votes

Dans les dossiers res->drawable. Il peut y en avoir plusieurs - chacun correspond à une résolution différente (ex. basse résolution/haute résolution). Si vous n'avez pas d'images spécifiques pour chaque résolution, n'importe laquelle fonctionnera.

5 votes

La réponse est bonne. Mais je me demande si quelqu'un a trouvé les tailles de téléphone typiques pour chaque groupe de ppp, ce qui serait bien utile lors de la préparation des images. Modifié : trouvé - stackoverflow.com/questions/10574363/

25voto

sami3000 Points 21

Une autre option est d'ajouter une seule image (pas nécessairement grande) dans les drawables (appelons-la backgroung.jpg), de créer un ImageView iv_background à la racine de votre xml sans attribut "src". Puis dans la méthode onCreate de l'activité correspondante :

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

Pas de recadrage, pas de nombreuses images de tailles différentes. J'espère que cela vous aidera !

3 votes

C'est une solution utile, mais n'oubliez pas d'effectuer le traitement des bitmaps en dehors du thread principal : developer.Android.com/training/displaying-bitmaps/

19voto

Munish Kapoor Points 796

Vous devez placer les images de différentes tailles dans le dossier suivant

pour plus de détails, visitez ce site lien

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

et utiliser un arrière-plan RelativeLayout ou LinearLayout au lieu d'utiliser ImageView comme dans l'exemple suivant

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

</RelativeLayout>

0 votes

Je reçois une erreur qui Unexpected namespace prefix "xmlns" found for tag RelativeLayout

0 votes

Cela rend mon Fragment si laggy. Je n'arrive pas à comprendre pourquoi.

0 votes

Utiliser le cache ou charger l'image avec picasso( square.github.io/picasso ) j'espère que cela résoudra votre problème

7voto

NoToast Points 240

Qu'en est-il

android:background="@drawable/your_image"

sur la mise en page principale de votre activité ?

De cette façon, vous pouvez également avoir des images différentes pour différentes densités d'écran en les plaçant dans les emplacements appropriés. res/drawable-**dpi les dossiers.

1voto

sb_269 Points 258

En accord avec la réponse de NoToast, vous devez avoir plusieurs versions de "votre_image" dans votre res/drawable-ldpi, mdpi, hdpi, x-hdpi (pour les très grands écrans), supprimer match_parent et garder Android : adjustViewBounds="true" (en anglais)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X