web-dev-qa-db-fra.com

Rembourrage indésirable autour d'un ImageView

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):

note the green border

(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>
130
stefs

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!

414
stefs
Android:scaleType="fitXY"

Ça marche pour moi.

34
fullMoon

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, 

  1. Modifiez la taille de l'image pour l'adapter à la disposition spécifiée ou
  2. Utilisez Android:scaleType pour ajuster l’image. Par exemple, vous pouvez spécifier Android:scaleType="fitXY"
2
Nazar Merza

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"
0
Las Lemieux

utiliser cet Android: scaleType = "fitXY" dans imageview xml

0
Gaurav
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.

0
NotACleverMan

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"

0
Udaykiran