J'ai une LinearLayout
avec une largeur définie sur fill_parent
et une hauteur sur wrap_content
. Maintenant, je veux lui donner un arrière-plan à partir d'un fichier png, mais le faire de manière traditionnelle provoque le redimensionnement de LinearLayout
afin d'afficher tout l'arrière-plan au lieu de rogner la partie supplémentaire.
Comment définir l'arrière-plan de LinearLayout
pour qu'il ne soit pas redimensionné?
Merci
Il semble qu’une telle chose ne soit réalisable qu’en utilisant ImageView
et en définissant le paramètre scaleType
en conséquence. Une solution rapide consiste à utiliser FrameLayout
et à placer ImageView
sous une autre disposition avec un arrière-plan transparent.
Code:
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scaleType="centerCrop"
Android:src="@drawable/background" />
</FrameLayout>
Le comportement par défaut des bitmaps d'arrière-plan consiste à remplir complètement le conteneur et à augmenter la taille horizontale et verticale du conteneur si nécessaire. La solution consiste à créer une ressource bitmap pouvant être dessinée et à modifier la gravité.
Vérifiez le lien suivant et recherchez les valeurs de gravité possibles. Votre vue devrait alors simplement faire référence à la ressource pouvant être dessinée et tout devrait bien se passer.
http://developer.Android.com/guide/topics/resources/drawable-resource.html#Bitmap
J'ai résolu celui-ci en sous-classant LinearLayout
et en surchargeant le rappel onMeasure(int,int)
, puis en mettant à jour le XML de présentation pour qu'il utilise mon nouveau type de présentation. Je ne suis pas libre d’afficher ce code exact, mais j’ai invoqué l’implémentation super.onMeasure(int,int)
et vérifié si la hauteur mesurée est revenue à la hauteur exacte de mon image de fond. Si tel est le cas, je saisis la hauteur mesurée de toutes les vues enfant, puis calcule une nouvelle valeur de hauteur et la passe à setMeasuredDimension(int,int)
.