Je vois de nombreuses applications qui utilisent une image plein écran comme arrière-plan. Ceci est un exemple:
Je souhaite l’utiliser dans un projet. La meilleure façon de procéder jusqu’à présent consiste à utiliser une image de grande taille, de la placer dans un fichier ImageView
et d’utiliser Android: adjustViewBounds="true"
pour ajuster le paramètre. les marges
Le problème est que si un écran avec une résolution très élevée, l'image est insuffisante.
Une autre option à laquelle je pensais est d’utiliser l’image dans un FrameLayout
, avec match_parent
dans width
et height
en tant qu’arrière-plan ... ceci étend l’image, mais je pense que le le résultat n'est pas très bon.
Comment le ferais-tu?
Il y a plusieurs façons de le faire.
Option 1:
Créez différentes images parfaites pour différents dpi et placez-les dans un dossier pouvant être dessiné. Puis mettre
Android:background="@drawable/your_image
Option 2:
Ajouter une seule grande image. Utilisez FrameLayout. En tant que premier enfant, ajoutez un ImageView
. Définissez les éléments suivants dans votre ImageView.
Android:src="@drawable/your_image"
Android:scaleType = "centerCrop"
Une autre option consiste à ajouter une seule image (pas nécessairement grande) dans les éléments dessinables (appelons-la backgroung.jpg), à 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 beaucoup d'images de tailles différentes. J'espère que ça aide!
Vous devriez mettre les images de différentes tailles dans le dossier suivant
pour plus de détails, visitez ceci lien
ldpi
mdpi
hdpi
xhdpi
xxhdpi
et utiliser 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>
Qu'en est-il de
Android:background="@drawable/your_image"
sur la disposition principale 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 dossiers res/drawable-**dpi
appropriés.
utilisez ceci
Android:background="@drawable/your_image
dans votre activité, une première mise en page linéaire ou relative.
Si vous souhaitez que votre image affiche AU-DELÀ une barre d’action transparente, définissez les éléments suivants dans la définition de style de votre thème:
<item name="windowActionBarOverlay">true</item>
<item name="Android:windowActionBarOverlay">true</item>
Prendre plaisir!
Cela fait un moment que cela a été posté, mais cela m'a aidé.
Vous pouvez utiliser des mises en page imbriquées. Commencez avec un RelativeLayout et placez votre ImageView dans celui-ci.
Définissez height et width 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 mettre n'importe quelle autre disposition comme vous le feriez normalement, comme 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>
Ajoutez Android:background="@drawable/your_image"
à l'intérieur de votre Relativelayout/Linearlayout Worked.
Conformément à la réponse de NoToast, vous devez disposer de plusieurs versions de "your_image" dans vos res/drawable-ldpi, mdpi, hdpi, x-hdpi (pour les écrans très grands), remove match_parent et gardez Android: adjustViewBounds = "true"
Si vous avez bg.png comme image d’arrière-plan, 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>