Image d'arrière-plan plein écran dans une activité

145

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

Image d'arrière-plan plein écran

Je veux l'utiliser dans un projet, le meilleur moyen que j'ai trouvé jusqu'à présent pour le faire est d'utiliser une image de grande taille, de la mettre dans un ImageViewet de l'utiliser android: adjustViewBounds="true"pour ajuster les marges

Le problème est que si un écran avec une très haute résolution, l'image est insuffisante.

Une autre option à laquelle j'ai pensé est d'utiliser l'image dans un FrameLayout, avec match_parentdans widthet heightcomme arrière-plan ... cela étire l'image, mais je pense que le résultat n'est pas très bon.

Comment feriez-vous cela?

Sergio76
la source
3
Ne croyez pas que cela fonctionne sur les arrière-plans, mais cela devrait fonctionner sur les images. android:scaleType="centerCrop"
EGHDK

Réponses:

223

Il existe plusieurs façons de procéder.

Option 1:

Créez différentes images parfaites pour différents dpi et placez-les dans un dossier pouvant être dessiné associé. Puis réglez

android:background="@drawable/your_image"

Option 2:

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

android:src="@drawable/your_image"
android:scaleType = "centerCrop"
stinepike
la source
2
où stockez-vous "votre_image"?
Atharva Johri
5
Dans les dossiers res-> drawable. Il peut y en avoir plusieurs - chacun représente une résolution différente (par exemple, basse résolution / haute résolution). Si vous n'avez pas d'images spécifiques pour chaque résolution, n'importe laquelle fonctionnera.
krodmannix
5
La réponse est bonne. Mais je me demande si quelqu'un a trouvé les tailles de téléphone typiques pour chaque groupe dpi, ce qui serait très utile lors de la préparation des images. Modifié: trouvé - stackoverflow.com/questions/10574363/…
renard
7
dernière option -> mémoire
insuffisante
1
Erreur OOM, nous arrivons ... si c'est une grande image, vous devrez augmenter ou réduire la taille de l'écran en fonction de la taille de l'écran! dans ce cas, vous devrez probablement charger un bitmap via une tâche asynchrone.
Jonny2Plates
25

Une autre option est d'ajouter une seule image (pas forcément grande) dans les drawables (appelons-la backgroung.jpg), créez 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 beaucoup d'images de tailles différentes. J'espère que ça aide!

axplusb
la source
3
C'est une solution utile, mais n'oubliez pas de faire le traitement bitmap hors du fil principal: developer.android.com/training/displaying-bitmaps/...
Kyle Ivey
19

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

pour plus de détails, visitez ce lien

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

et utilisez l'arrière-plan RelativeLayout ou LinearLayout au lieu d'utiliser ImageView comme 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">

</RelativeLayout>
Munish Kapoor
la source
Je reçois une erreur quiUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein
Cela rend mon Fragment si lent. Je ne comprends pas pourquoi.
Sermilion
utilisez le cache ou chargez l'image avec picasso ( square.github.io/picasso ) l'espoir résoudra votre problème
Munish Kapoor
7

Qu'en est-il de

android:background="@drawable/your_image"

sur le plan principal de votre activité?

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

NoToast
la source
7

Cela fait un moment que cela n'a pas été publié, mais cela m'a aidé.

Vous pouvez utiliser des mises en page imbriquées. Commencez par un RelativeLayout et placez votre ImageView dans celui-ci.

Définissez la hauteur et la largeur sur match_parent pour remplir l'écran.

Définissez scaleType = "centreCrop" pour que l'image s'adapte à l'écran et ne s'étire pas.

Ensuite, vous pouvez insérer d'autres mises en page comme vous le feriez normalement, comme le LinearLayout ci-dessous.

Vous pouvez utiliser android: alpha pour définir la transparence de l'image.

<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>
smurph
la source
7

Si vous souhaitez que votre image affiche DERRIÈRE une barre d'action transparente, placez ce qui suit dans la définition de style de votre thème:

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

Prendre plaisir!

Jens
la source
7

utilisez ceci

android:background="@drawable/your_image"

dans votre activité toute première mise en page linéaire ou relative.

Syed
la source
1

Conformément à la réponse de NoToast, vous auriez besoin d'avoir plusieurs versions de "your_image" dans votre res / drawable-ldpi, mdpi, hdpi, x-hdpi (pour les grands écrans xtra), supprimez match_parent et conservez Android: AdjustViewBounds = " vrai"

sb_269
la source
1

Ajoutez à l' android:background="@drawable/your_image"intérieur de votre Relativelayout / Linearlayout Worked.

Mwongera808
la source
0

Si vous avez bg.png comme image de fond, alors simplement:

<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
la source
-1

Travail. vous devriez essayer ceci:

android:src="@drawable/img"

la source
-1

three step for put background

1) vous devez choisir votre image similaire. par exemple: entrez la description de l'image ici

2) Ensuite, vous copiez cette image en dessinable. avertissement: vous devez choisir des types courts pour l'image du nom.

entrez la description de l'image ici

3) vous allez à la page xml prévu et écrivez:

android: background = "id picture" par exemple mon id d'image est @ drawable / download.

entrez la description de l'image ici

terminer.

mohammad vakili
la source
-2

Le moyen le plus simple:

Étape 1: Ouvrez le fichier AndroidManifest.xml

Vous pouvez voir le fichier ici!

Étape 2: localiser android:theme="@style/AppTheme" >

Étape 3: Passez à android:theme="@style/Theme.AppCompat.NoActionBar" >

Étape 4: Ajoutez ensuite ImageView et Image

Étape 4: c'est tout!

Jishnu N Krishnan
la source