it-swarm.com.de

Unerwünschte Auffüllung um eine ImageView

In allen meinen Aktivitäten/Ansichten muss eine Kopfgrafik eingefügt werden. Die Datei mit dem Header heißt 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>

Beachten Sie den Android:background="#00FF00" (grün), es dient nur der Visualisierung.

Ich füge sie so in meine Ansichten ein:

<?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" />
  (...)

Wenn ich es also ausprobiere, sieht das Ergebnis wie das linke Bild aus, anstatt wie es aussehen soll (rechts):

note the green border

(1) Dieser orangefarbene Teil ist das betreffende Image/ImageView
(2) Der ungeliebte grüne Rand. Anmerkung: Normalerweise wäre der grüne Bereich transparent - er ist nur grün, weil ich background eingestellt habe. 

Beachten Sie den grünen Rand um das Bild oben. Es ist Teil der ImageView und ich kann einfach nicht herausfinden, warum es da ist oder wie ich es loswerden kann. Alle Auffüllungen und Ränder werden auf 0 gesetzt (aber das Ergebnis ist das gleiche, wenn ich sie weglasse). Das Bild ist ein 480x64px-JPEG * und ich habe es in res/drawable (nicht in einem der drawable-Xdpi).

(* jpeg, weil ich anscheinend über das alte png-gamma-Problem gestolpert bin - zunächst habe ich das Problem gelöst, indem ich die grüne Umrandung in derselben Orange wie das Bild dargestellt habe und die Farben nicht übereinstimmen.)

Ich habe es auf meinem htc desire/2.2/Build 2.33.163.1 und auf dem Emulator ausprobiert. Ich habe das Problem auch jemandem in # Android-dev beschrieben. Sie konnte das Problem reproduzieren, hatte aber auch keine Erklärung. Build-Ziel ist 1.6.

update @tehgoose: Dieser Code liefert genau dasselbe Ergebnis von oben + unten. 

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

endlich!

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

das Attribut adjustViewbounds hat den Trick:

Setzen Sie diese Option auf "true", wenn ImageView seine Grenzen anpassen soll, um das Seitenverhältnis des Zeichenbereichs zu erhalten.

ich stolperte darauf hier . danke für Ihre Hilfe!

414
stefs
Android:scaleType="fitXY"

Für mich geht das.

34
fullMoon

Dies hat mit dem Bildseitenverhältnis zu tun. Standardmäßig behält das System das ursprüngliche Seitenverhältnis der Bildquelle bei. Was in den meisten Fällen nicht genau mit dem Layout oder den im Layout angegebenen Abmessungen übereinstimmt. Deshalb, 

  1. Ändern Sie entweder die Größe des Bildes, um es an das angegebene Layout anzupassen, oder
  2. Verwenden Sie Android:scaleType, um das Bild anzupassen. Sie können beispielsweise Android:scaleType="fitXY" angeben.
2
Nazar Merza

diese zusätzliche Polsterung wird automatisch generiert, da Android versuchen würde, das ursprüngliche Seitenverhältnis zu erhalten. Bitte versuchen Sie es unten

scaletype = "fitCenter"
Android:adjustViewBounds="true"
Android:layout_height="wrap_content"
0
Las Lemieux

verwenden Sie dieses Android: scaleType = "fitXY" in imageview xml

0
Gaurav
Android:layout_height="wrap_content"

Sie müssen es in "fill_parent" ändern.

Möglicherweise müssen Sie das Bild auch so skalieren, dass es das richtige Verhältnis zum Füllen des Rahmens darstellt, in dem es sich befindet.

Ich verstehe nicht, warum Sie das Rahmenlayout dort überhaupt brauchen. Andernfalls würde Ihr Bild sowieso den Bildschirm ausfüllen.

EDIT: ja, sorry, die xml ist die Höhe für die Bildansicht.

0
NotACleverMan

Möglicherweise können Sie specific height to imageView say 50dp or 40dp und adjust image to make green border verschwinden lassen.

ZB: Android:layout_height="40dp"

0
Udaykiran