Je dois inclure un graphique d'en-tête 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), ce n'est qu'à des fins 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" />
(...)
Donc, lorsque je l'essaye, le résultat ressemble à l'image de gauche, au lieu de ce à quoi il devrait ressembler (à droite):
(1) Cette partie - la partie orange - est l'image / ImageView en question
(2) La bordure verte non aimée. Remarque: normalement, la zone verte serait transparente - Elle est uniquement verte car j'ai défini le 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 rembourrages et marges à 0 (mais le résultat est le même lorsque je les omis). L'image est un jpeg de 480x64px * et je l'ai mis dans res / drawable (pas dans l'un des drawable-Xdpi
si).
(* jpeg, car il semble que je suis tombé sur l'ancien problème gamma png - au début, j'ai contourné le problème en faisant de la bordure verte la même orange que l'image, et les couleurs ne correspondaient pas.)
Je l'ai essayé sur mon htc desire / 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 pas non plus d'explication. l'objectif de construction est 1.6.
update @tehgoose: ce code donne exactement le même résultat complété en haut et en bas.
<?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>
android:layout_margin="-10dp"
,android:padding="-10dp"
Réponses:
enfin!
l' attribut AdjustViewbounds a fait l'affaire:
je suis tombé dessus ici . Merci de votre aide!
la source
Ça marche pour moi.
la source
scaleType="fitXY"
fait quelque chose de différent cependant: il change le rapport hauteur / largeur de l'image, ce qui entraîne une distorsion. cela peut parfois être acceptable, par exemple pour une image d'arrière-plan abstraite.android:adjustViewBounds="true"
etandroid:scaleType="fitXY"
c'était ce dont j'avais besoin pour aligner ImageViews dans ma mise en page. Les images étaient décalées d'un pixel ou deux (très petites sur un écran haute résolution) avec justeadjustViewBounds
. L'ajout descaleType
semble forcer une mise à l'échelle finale de l'image une fois les limites de la vue ajustées, ce qui force l'image à être mise à l'échelle à la taille totale des nouvelles limites.Cela a à voir avec le rapport hauteur / largeur de l'image. Par défaut, le système conserve le rapport hauteur / largeur d'origine 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. Par conséquent,
android:scaleType
pour adapter l'image. Par exemple, vous pouvez spécifierandroid:scaleType="fitXY"
la source
ces rembourrages supplémentaires sont générés automatiquement car l'androïde essaierait d'obtenir le rapport hauteur / largeur d'origine. veuillez essayer ci-dessous
la source
Peut-être que vous pouvez donner
specific height to imageView say 50dp or 40dp
etadjust image to make green border
disparaître.Par exemple:
android:layout_height="40dp"
la source
Vous devez le changer en "fill_parent"
Vous devrez peut-être également redimensionner votre image afin que ce soit le bon rapport pour remplir la mise en page dans laquelle elle se trouve.
Je ne comprends pas du tout pourquoi vous avez besoin de la disposition du cadre. Sans cela, votre image ne ferait que remplir l'écran de toute façon.
EDIT: oui, désolé, le xml est la hauteur de l'image vue.
la source
ImageView
, ce n'est pas si évident dans votre réponse :)utiliser cet androïde: scaleType = "fitXY" dans imageview xml
la source
Vous devez fournir une forme autour de l'image pour donner un meilleur aspect.
Voici ce que j'ai utilisé:
la source