J'ai besoin d'inclure un en-tête graphique dans toutes mes activités/vues. Le fichier avec l'en-tête s'appelle header.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="#0000FF"
Android:padding="0dip">
<ImageView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:src="@drawable/header"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_margin="0dip"
Android:layout_marginTop="0dip"
Android:layout_marginBottom="0dip"
Android:padding="0dip"
Android:paddingTop="0dip"
Android:paddingBottom="0dip"
Android:layout_gravity="fill"
Android:background="#00FF00"
/>
</FrameLayout>
Notez le Android:background="#00FF00"
(vert), il ne s'agit que de visualisation.
Je les inclut dans mes vues comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
style="@style/white_background">
<include layout="@layout/header" />
(...)
Ainsi, lorsque je l'essaie réellement, le résultat ressemble à l'image de gauche, au lieu de ce à quoi elle devrait ressembler (à droite):
(1) Ceci - la partie orange - est l'image/ImageView en question
(2) La bordure verte mal aimée. Remarque: normalement, la zone verte serait transparente. Elle n’est verte que parce que je mets la valeur background
.
Notez la bordure verte autour de l'image en haut; Cela fait partie de ImageView et je ne peux tout simplement pas comprendre pourquoi il est là ou comment je peux m'en débarrasser. Il définit tous les marges et marges sur 0 (mais le résultat est le même quand je les omets) L'image est un fichier jpeg * 480x64px * et je l'ai mise en mode res/drawable (pas dans l'un des drawable-Xdpi
cependant).
(* jpeg, car il semble que je sois tombé sur le vieux problème de gamma png - au début, j’ai travaillé sur le problème en faisant en sorte que la bordure verte soit du même orange que la photo et que les couleurs ne correspondent pas.)
Je l'ai essayé sur mon désir/2.2/Build 2.33.163.1 et sur l'émulateur. J'ai également décrit le problème à quelqu'un dans # Android-dev; Elle pouvait reproduire le problème mais n'avait aucune explication non plus. la cible de construction est 1,6.
update @tehgoose: ce code donne exactement le même résultat avec remplissage supérieur et inférieur.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
style="@style/white_background">
<!-- <include layout="@layout/header" /> -->
<ImageView
Android:src="@drawable/header"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="#00FF00"
Android:layout_weight="0"
/>
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:padding="8dip"
Android:layout_weight="1">
(... rest of the elements)
</LinearLayout>
</LinearLayout>
enfin!
<ImageView
(...)
Android:adjustViewBounds="true" />
l'attribut adjustViewbounds a fait l'affaire:
Définissez-la sur true si vous souhaitez que ImageView ajuste ses limites pour conserver le rapport hauteur/largeur de son dessin.
je suis tombé sur ici . Merci de votre aide!
Android:scaleType="fitXY"
Ça marche pour moi.
Cela a à voir avec le format d'image. Par défaut, le système conserve le format d'image original de la source d'image. Ce qui dans la plupart des cas ne correspond pas exactement à la mise en page ou aux dimensions spécifiées dans la mise en page. Donc,
Android:scaleType
pour ajuster l’image. Par exemple, vous pouvez spécifier Android:scaleType="fitXY"
ces rembourrages supplémentaires sont générés automatiquement car Android tenterait d'obtenir le rapport de format d'origine. s'il vous plaît essayez ci-dessous
scaletype = "fitCenter"
Android:adjustViewBounds="true"
Android:layout_height="wrap_content"
utiliser cet Android: scaleType = "fitXY" dans imageview xml
Android:layout_height="wrap_content"
Vous devez le changer en "fill_parent"
Vous devrez peut-être également redimensionner votre image afin que le rapport de remplissage qui convient le mieux soit rempli.
Je ne comprends pas pourquoi vous avez besoin de la disposition du cadre. Sans cela, votre image remplirait simplement l'écran de toute façon.
EDIT: oui, désolé, le xml est la hauteur de la vue image.
Peut-être que vous pouvez laisser specific height to imageView say 50dp or 40dp
et adjust image to make green border
disparaître.
Exemple: Android:layout_height="40dp"