J'ai une mise en page qui contient des champs de texte et une image d'arrière-plan qui s'affiche en haut de mon activité. J'aimerais que l'image d'arrière-plan soit à l'échelle pour envelopper le contenu (ne vous souciez pas du rapport de format). Cependant, l'image est plus grande que le contenu, aussi la mise en page enveloppe-t-elle l'image d'arrière-plan. Voici mon code original:
<RelativeLayout
Android:layout_width="fill_parent"
Android:id="@+id/HeaderList"
Android:layout_gravity="top"
Android:layout_height="wrap_content"
Android:background="@drawable/header">
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:id="@+id/NameText"
Android:text="Jhn Doe"
Android:textColor="#FFFFFF"
Android:textSize="30sp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:paddingLeft="4dp"
Android:paddingTop="4dp"
/>
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:textColor="#FFFFFF"
Android:layout_alignParentLeft="true"
Android:id="@+id/HoursText"
Android:text="170 hours"
Android:textSize="23sp"
Android:layout_below="@+id/NameText"
Android:paddingLeft="4dp"
/>
</RelativeLayout>
Après avoir cherché d'autres questions, j'ai trouvé les deux suivantes:
Comment envelopper les vues de contenu plutôt que d'arrière-plan dessinable?
Mettre à l'échelle une image dessinable ou en arrière-plan?
Sur cette base, j'ai créé un FrameLayout avec ImageView montrant l’arrière-plan. Malheureusement, je ne peux toujours pas le faire fonctionner. Je souhaite que la hauteur de l'image d'arrière-plan soit réduite/agrandie avec la taille des vues de texte, mais avec FrameLayout, le mode ImageView correspond à la taille de son parent et je ne trouve pas le moyen de l'adapter à son parent. la taille de la disposition d'affichage du texte. Voici mon code mis à jour:
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<ImageView Android:src="@drawable/header"
Android:layout_width="fill_parent"
Android:scaleType="fitXY"
Android:layout_height="fill_parent"
/>
<RelativeLayout
Android:layout_width="fill_parent"
Android:id="@+id/HeaderList"
Android:layout_gravity="top"
Android:layout_height="wrap_content"
>
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:id="@+id/NameText"
Android:text="John Doe"
Android:textColor="#FFFFFF"
Android:textSize="30sp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:paddingLeft="4dp"
Android:paddingTop="4dp"
/>
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:textColor="#FFFFFF"
Android:layout_alignParentLeft="true"
Android:id="@+id/HoursText"
Android:text="170 hours"
Android:textSize="23sp"
Android:layout_below="@+id/NameText"
Android:paddingLeft="4dp"
/>
</RelativeLayout>
</FrameLayout>
Quelqu'un a-t-il des suggestions sur la meilleure façon de mettre une image à l'échelle du contenu d'une mise en page? Le rapport de format de l'image ne me concerne pas, cela n'a pas d'importance, je veux juste qu'elle remplisse l'arrière-plan.
Merci!
J'ai eu le même problème (je pense), et la seule solution que j'ai pu trouver était la suivante:
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
>
<View
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/some_image"
Android:layout_alignTop="@+id/actual_content"
Android:layout_alignBottom="@id/actual_content"
Android:layout_alignLeft="@id/actual_content"
Android:layout_alignRight="@id/actual_content"
/>
<LinearLayout
Android:id="@id/actual_content"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
>
<!-- more stuff ... -->
</LinearLayout>
</RelativeLayout>
Vous pouvez essayer cette astuce,
Travailler avec RealtiveLayout (pas obligatoire mais à la place de FrameLayout et utiliser Android: scaleType = "fitXY". Déplacez l'imageView vers RealtiveLayout qui contient les vues de texte Android: id = "@ + id/HeaderList" et désactivez l'arrière-plan Android: background = "@ drawable/header "à ce niveau.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
Android:id="@+id/principal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/header" >
<RelativeLayout
Android:layout_width="fill_parent"
Android:id="@+id/HeaderList"
Android:layout_gravity="top"
Android:layout_height="wrap_content" >
<ImageView
Android:id="@+id/backImg"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_centerInParent="true"
Android:adjustViewBounds="true"
Android:background="@color/blancotransless"
Android:src="@drawable/header"
Android:scaleType="fitXY" >
</ImageView>
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:id="@+id/NameText"
Android:text="John Doe"
Android:textColor="#FFFFFF"
Android:textSize="30sp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:paddingLeft="4dp"
Android:paddingTop="4dp"
/>
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:textColor="#FFFFFF"
Android:layout_alignParentLeft="true"
Android:id="@+id/HoursText"
Android:text="170 hours"
Android:textSize="23sp"
Android:layout_below="@+id/NameText"
Android:paddingLeft="4dp"
/>
</RelativeLayout>
</RelativeLayout>
Plus ou moins ça devrait marcher!
Créez un fichier XML dessinable, par exemple mybackground.xml
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:src="@drawable/header"
Android:gravity="fill" />
Puis dans votre RelativeLayout lors de la première utilisation du fragment de code
Android:background="@drawable/mybackground"
Je pense que j'ai déjà fait quelque chose de similaire dans le passé. Essayez de jouer avec le réglage de la gravité dans votre vue, je pense que l'un d'eux devrait faire ce que vous voulez.
Je ne l'ai pas essayé, mais si vous définissez l'image d'arrière-plan de manière dynamique sur le onCreate, cela pourrait fonctionner. La taille de la mise en page doit déjà être définie.