web-dev-qa-db-fra.com

Comment faire pour que l'image remplisse l'arrière-plan RelativeLayout sans s'étirer

Dans mon projet Android, je ne sais pas trop comment faire en sorte que mon image d'arrière-plan remplisse la totalité de l'élément racine RelativeLayout en XML, qui correspond à la taille de l'écran. Je veux être sûr que cela fonctionne pour tous les formats d'image, afin que l'image soit coupée verticalement ou horizontalement si nécessaire. Est-ce que quelqu'un sait comment faire cela facilement? J'ai seulement vu des questions concernant ImageViews et Buttons, mais pas vraiment génériques Views.

Mon fichier XML actuellement:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/enclosing_rl"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@drawable/background"
    Android:fitsSystemWindows="false">
<!-- Other elements -->
</RelativeLayout>
22
pqn

À part transformer votre image en un neuf patch, je ne pense pas que ce soit possible. Au lieu de cela, vous pouvez ajouter un ImageView en tant que première vue de votre RelativeLayout. Définissez layout_centerInParent sur true et réglez les paramètres layout_width et layout_height sur match_parent. Puis définissez scaleType sur centerCrop. Cela garantira que l’image occupe l’écran sans aucune distorsion, mais en fonction de la taille/de l’orientation de l’écran, une partie du haut/bas ou de la gauche/droite de l’image peut être coupée.

<ImageView 
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_centerInParent="true"
        Android:scaleType="centerCrop"
            Android:src="@drawable/background" />

Toute autre vue de RelativeLayout apparaîtra au-dessus de ImageView, à condition qu'il s'agisse de la première vue de RelativeLayout (lorsque vous êtes dans le xml).

54
Flynn81

Créez une ressource XML dessinable en bitmap dans votre dossier res/drawable:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/background"
    Android:tileMode="repeat" />

Utilisez ce dessin comme fond à la place de @ dessin/fond

11
tiguchi

selon cette réponse Si vous voulez que votre ImageView remplisse votre RelativeLayout, utilisez les paramètres align pour ImageView.

vous pouvez placer toutes vos vues dans une variable LinearLayout et définir le paramètre align sur votre arrière-plan ImageView:

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content" >

     <ImageView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:src="@drawable/my_background"
        Android:scaleType="centerCrop"
        Android:layout_alignTop="@+id/my_views"
        Android:layout_alignBottom="@+id/my_views"

        />

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:id="@+id/my_views"
        Android:orientation="vertical" >
    <!-- stuff -->
    </LinearLayout>


</RelativeLayout>
6

Sa réponse intelligente et efficace consiste à définir la propriété scaleType of image view!

 Android:scaleType="fitCenter"
0
Sheharyar Ejaz