150 votes

Rembourrage indésirable autour d'un ImageView

j'ai besoin d'inclure un en-tête graphique dans toutes mes activités/points de vue. le fichier avec l'en-tête est appelé 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>

remarque l' android:background="#00FF00" (vert), c'est juste à des fins de visualisation.

- je inclure dans mon point de vue 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, quand j'ai vraiment l'essayer, le résultat ressemble à la gauche de l'image, au lieu de ce qu'il devrait ressembler (à droite):

note the green border

(1) ce - orange - partie est l'image/ImageView en question
(2) le mal-aimé bordure verte. remarque: normalement, l'espace vert transparent - c'est uniquement en vert car j'ai mis l' background.

note de la frontière verte autour de l'image en haut; c'est une partie de l'ImageView et je ne peux pas comprendre pourquoi il est là ou comment je peux me débarrasser d'elle. elle a mis tous les rembourrages et les marges à 0 (mais le résultat est le même quand je les omettre) . l'image est un 480x64px jpeg* et je l'ai mis dans res/drawable (pas dans un de la drawable-Xdpi tout de même).

(* jpeg, car il semble que je suis tombé sur l'ancien png gamma problème - au début, j'ai contourné le problème en faisant de la frontière verte le même orange que l'image, et les couleurs ne correspondent pas.)

je l'ai essayé sur mon htc desire/2.2/Construire 2.33.163.1 et sur l'émulateur. aussi, j'ai décrit le problème à quelqu'un dans #android-dev; elle a pu reproduire le problème, mais aucune explication n'était fournie. construire objectif est de 1,6.

mise à jour @tehgoose: ce code donne l'exacte même haut+bas collier de résultat.

<?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>

467voto

stefs Points 8257

enfin!!!

<ImageView
  (...)
  android:adjustViewBounds="true" />

le adjustViewbounds attribut a fait le tour:

Activez cette option si vous souhaitez que l'ImageView pour régler ses limites de façon à conserver les proportions de ses drawable.

je suis tombé sur elle ici. merci pour votre aide!

45voto

fullMoon Points 66
 android:scaleType="fitXY"
 

ça m'a fait 4

0voto

NotACleverMan Points 2918
 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.

0voto

Udaykiran Points 2666

Peut-être pouvez-vous laisser disparaître specific height to imageView say 50dp or 40dp et adjust image to make green border .

Ex: android:layout_height="40dp"

-1voto

Zoombie Points 1624

Vous devez définir une forme autour de l'image pour donner un meilleur aspect.

Voici ce que j'ai utilisé:

 <shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--<gradient android:startColor="#FFFFFF" android:endColor="#969696"

    android:angle="270">
-->
<gradient android:startColor="#FFFFFF" android:endColor="#FFFFFF"

    android:angle="270">
</gradient>
    <stroke android:width="2dp" android:color="@color/graycolor" />
<corners android:radius="2dp" />
<padding android:left="5dp" android:top="5dp" android:right="5dp"
    android:bottom="5dp" />
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X