Unerwünschtes Padding um eine ImageView

Lesezeit: 7 Minuten

Benutzer-Avatar
stefs

Ich muss eine Kopfgrafik in alle meine Aktivitäten/Ansichten einfügen. 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="https://stackoverflow.com/questions/5830503/@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 das android:background="#00FF00" (grün), es dient nur zu Visualisierungszwecken.

Ich beziehe sie wie folgt 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 tatsächlich ausprobiere, sieht das Ergebnis wie das linke Bild aus, anstatt wie es aussehen sollte (rechts):

Beachten Sie den grünen Rand

(1) Dieser – der orangefarbene – Teil ist das betreffende Bild/ImageView
(2) Der ungeliebte grüne Rand. anmerkung: normalerweise wäre der grüne bereich durchsichtig – er ist nur grün weil ich den einstelle background.

Beachten Sie den grünen Rand um das Bild oben; Es ist Teil von ImageView und ich kann einfach nicht herausfinden, warum es da ist oder wie ich es loswerden kann. Es hat alle Auffüllungen und Ränder 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 abgelegt (nicht in einer der drawable-Xdpi obwohl).

(* jpeg, weil ich anscheinend über das alte png-Gamma-Problem gestolpert bin – zuerst habe ich das Problem umgangen, indem ich den grünen Rand genauso orange wie das Bild gemacht habe und die Farben nicht übereinstimmten.)

Ich habe es auf meinem HTC Desire/2.2/Build 2.33.163.1 und auf dem Emulator ausprobiert. Außerdem habe ich das Problem jemandem in #android-dev beschrieben; Sie konnte das Problem reproduzieren, hatte aber auch keine Erklärung. Build-Ziel ist 1.6.

@tehgoose aktualisieren: Dieser Code liefert genau das gleiche oben + unten aufgefüllte Ergebnis.

<?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="https://stackoverflow.com/questions/5830503/@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>

  • Negative Rand- und/oder Auffüllwerte können ebenfalls funktionieren –android:layout_margin="-10dp", android:padding="-10dp"

    – samus

    16. November 2018 um 21:22 Uhr

Benutzer-Avatar
stefs

endlich!

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

das adjustViewbounds-Attribut hat den Trick gemacht:

Legen Sie dies auf „true“ fest, wenn Sie möchten, dass ImageView seine Grenzen anpasst, um das Seitenverhältnis seines Zeichenobjekts beizubehalten.

hier bin ich darüber gestolpert. Vielen Dank für Ihre Hilfe!

  • Ich habe das gleiche Problem, aber diese Lösung hatte keine Wirkung.

    – Martin Müller

    2. August 2012 um 19:51 Uhr

  • Wow … ohne dieses Attribut wurde je nach Bildschirmdichte unerwünschtes Padding hinzugefügt, so dass es nur auf einigen Geräten passierte. Es hat mich verrückt gemacht, weil das Bild auf allen Geräten, die ich besitze, gut aussah, und als ich es dann auf dem Gerät eines Freundes ausprobierte, sah es wie Mist aus. DANKE.

    – DiscDev

    14. Dezember 2012 um 15:09 Uhr

  • Gott sei Dank ändere ich meinen ersten Versuch von dem Versuch, Fehler zu lösen, um etwas zu finden, das von Android abgenutzt ist. Ich glaube, dieses Problem begann bei einigen Herstellern, die Sachen von Android geändert haben, und dann müssen sie eine Eigenschaft setzen, um es in den nächsten Versionen zu lösen.

    – Ratata Tata

    31. Mai 2015 um 23:10 Uhr

  • Leider funktioniert dies nicht für niedrigere APIs, zumindest API 16 und 17.

    – luoser

    15. Januar 2016 um 23:22 Uhr

  • Wow, das ist genau das, wonach ich gesucht habe. Ich habe mich ein paar Stunden lang am Kopf gekratzt und sogar versucht, mein Layout ungültig zu machen und seine Höhe/Breite auf die des Bildes einzustellen. Eine so einfache Lösung, die perfekt funktioniert, ohne dass scaleType erforderlich ist.

    – CodyEngel

    12. Februar 2017 um 22:12 Uhr

Benutzer-Avatar
Vollmond

android:scaleType="fitXY"

Für mich geht das.

  • scaleType="fitXY" macht jedoch etwas anderes: Es ändert das Seitenverhältnis des Bildes, was zu Verzerrungen führt. dies kann manchmal akzeptabel sein, zB für ein abstraktes Hintergrundbild.

    – Stefs

    24. Oktober 2014 um 13:45 Uhr

  • Ich habe das Seitenverhältnis mit android:width und android:height gesteuert, und scaleType=”fitXY” hat die imageView für mich mit dem gewünschten Seitenverhältnis gefüllt, das war zumindest meine Erfahrung. Danke für deinen Beitrag.

    – Vollmond

    24. Oktober 2014 um 18:40 Uhr

  • Es funktioniert, aber das Bild ist unschön, unausgewogen, beschnitten

    – 최봉재

    21. April 2016 um 7:04 Uhr


  • Nicht genau, aber android:scaleType=”fitEnd” funktionierte wie Magie.

    – Der Bibliothekar

    13. März 2017 um 9:49 Uhr

  • Ich fand eine Kombination aus android:adjustViewBounds="true" und android:scaleType="fitXY" war das, was ich brauchte, um ImageViews in meinem Layout auszurichten. Die Bilder waren nur um ein oder zwei Pixel (sehr klein auf einem hochauflösenden Display) verschoben adjustViewBounds. Hinzufügen der scaleType scheint eine endgültige Skalierung des Bildes zu erzwingen, nachdem die Ansichtsgrenzen angepasst wurden, wodurch das Bild gezwungen wird, auf die volle Größe der neuen Grenzen zu skalieren.

    – Jeff Lockhart

    27. August 2018 um 19:12 Uhr


Benutzer-Avatar
MJ Montes

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

   android:scaleType="fitCenter"
   android:adjustViewBounds="true"
   android:layout_height="wrap_content"

Benutzer-Avatar
Nazar Merza

Das 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. Deswegen,

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

Verwenden Sie dieses android:scaleType=”fitXY” in imageview xml

Benutzer-Avatar
Udaykiran

Vielleicht kannst du geben specific height to imageView say 50dp or 40dp und adjust image to make green border verschwinden.

Z.B: android:layout_height="40dp"

android:layout_height="wrap_content"

Sie müssen es in “fill_parent” ändern.

Möglicherweise müssen Sie Ihr Bild auch skalieren, damit es das richtige Verhältnis hat, um das Rahmenlayout auszufüllen, in dem es sich befindet.

Ich verstehe nicht, warum Sie das Frame-Layout dort überhaupt brauchen. Ohne sie würde Ihr Bild sowieso nur den Bildschirm ausfüllen.

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

  • Das einzige, was hinzugefügt werden muss, ist, dass er die Layouthöhe auf einstellen muss ImageViewes ist nicht so offensichtlich in Ihrer Antwort 🙂

    – ernazm

    29. April 2011 um 10:00 Uhr

  • Ich habe es auch ohne Umgebungslayout versucht, ändert nichts. Außerdem ist das aktuelle Bild nur ein Platzhalter – es wird bald zusätzliche Elemente geben (die das umgebende Layout rechtfertigen). Ich möchte nicht, dass das Bild mit dem Bildschirm übereinstimmt, ich möchte, dass es genau dort oben ist.

    – Stefs

    29. April 2011 um 10:57 Uhr

  • Überprüfen Sie noch einmal, ob Ihr Bild oben und unten Leerzeichen enthält. Wenn nicht, versuchen Sie, das imageview-Objekt mit android:scaleType=”” zu skalieren. Es sollte einen geben, der zu dem passt, was Sie suchen.

    – NotACleverMan

    29. April 2011 um 12:58 Uhr

1341710cookie-checkUnerwünschtes Padding um eine ImageView

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy