Scale l'image de fond pour envelopper le contenu de la mise en page

J'ai une mise en page qui contient des champs de texte et possède une image d'arrière-plan affichée au sommet de mon activité. J'aimerais que l'image de fond s'élargisse pour envelopper le contenu (ne vous souciez pas du rapport d'aspect). Cependant, l'image est plus grande que le contenu, de sorte que la mise en forme enveloppe 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 parcouru certaines autres questions, j'ai trouvé ces deux:

  • Remplacement pour le mécanisme de poids linéaire
  • Comment configurer la couleur du texte dans une vue de texte par programmation
  • Avoir un EditText sur un clavier doux avec une vue GL en arrière-plan par programme
  • Quelle unité de mesure LayoutParams utilise-t-il?
  • Ajouter une vue de texte à un FrameLayout dans une position déterminée
  • L'attribut AlignParentRight à l'aide de Programmatically set dans RelativeLayout ne fonctionne pas?
  • Comment enrouler les vues de contenu plutôt que d'arrière plan?

    Scale a Drawable ou background image?

    Sur cette base, j'ai créé un FrameLayout avec un ImageView montrant l'arrière-plan. Malheureusement, je ne peux toujours pas le faire fonctionner. Je veux que la hauteur de l'image d'arrière-plan diminue / augmente la taille des vues de texte, mais avec FrameLayout, l'ImageView correspond à la taille de son parent et je ne peux pas trouver un moyen de rendre le parent adapté à La taille de la disposition de la vue 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> 

    Est-ce que quelqu'un a des suggestions quant à la meilleure façon de faire une échelle d'image à la taille du contenu d'une mise en page? Je ne suis pas préoccupé par le rapport d'aspect de l'image, car cela ne sera pas important, je veux simplement qu'il remplisse l'arrière-plan.

    Merci!

    8 Solutions collect form web for “Scale l'image de fond pour envelopper le contenu de la mise en page”

    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,

    • FrameLayout (wrapcontent, wrapcontent)
      • ImageView (correspondent parent, correspondent parent) // c'est ton fond
      • LinearLayout (wrapcontent, wrapcontent)
        • Tout votre contenu passe dans cette disposition linéaire ou tout autre type que vous voulez

    Travaillez avec RealtiveLayout (pas obligatoire mais à la place de FrameLayout et utilisez 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, il devrait fonctionner!

    Créez un xml dessiné, disons 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" /> 

    Ensuite, dans votre RelativeLayout dans le premier extrait de code, utilisez

     android:background="@drawable/mybackground" 

    Je pense que j'ai fait quelque chose de semblable à celui-ci dans le passé, essayez de jouer avec le paramètre de gravité dans votre image, je pense que l'un d'entre eux devrait faire ce que vous attendez.

    Je ne l'ai pas essayé, mais si vous définissez dynamiquement l'image d'arrière-plan sur le code OnCreate qui pourrait fonctionner. La taille de la mise en page devrait déjà être définie.

    Vous pouvez utiliser ceci:

     <ImageView ... android:scaleType="fitXY" > 

    J'espère que cela aidera)))

    Essayez ce code …..

     <LinearLayout android:layout_width="fill_parent" android:id="@+id/HeaderList" android:orientation="vertical" 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:paddingLeft="4dp" android:paddingTop="4dp" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#FFFFFF" android:id="@+id/HoursText" android:text="170 hours" android:textSize="23sp" android:paddingLeft="4dp" /> </LinearLayout> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.