Ich muss in alle meine Aktivitäten / Ansichten eine Kopfgrafik 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="@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):
(1) Dieser orangefarbene Teil ist das betreffende Bild / ImageView.
(2) Der ungeliebte grüne Rand. Hinweis: Normalerweise ist der grüne Bereich transparent. Er ist nur grün, weil ich den Wert festgelegt habe background
.
Beachten Sie den grünen Rand um das Bild oben. Es ist Teil der ImageView und ich kann einfach nicht herausfinden, warum es dort 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 gesetzt (nicht in einem der drawable-Xdpi
obwohl).
(* JPEG, weil ich anscheinend auf das alte PNG-Gamma-Problem gestoßen bin - zuerst habe ich das Problem umgangen, indem ich den grünen Rand mit dem Orange orange wie das Bild gemacht habe und die Farben nicht übereinstimmten.)
Ich habe es auf meinem HTC-Wunsch / 2.2 / Build 2.33.163.1 und auf dem Emulator versucht. 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.
update @tehgoose: Dieser Code liefert genau das gleiche oben + unten gepolsterte 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="@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>
quelle
android:layout_margin="-10dp"
android:padding="-10dp"
Antworten:
endlich!
das adjustViewbounds Attribut hat den Trick:
Ich bin hier darauf gestoßen . danke für Ihre Hilfe!
quelle
Für mich geht das.
quelle
scaleType="fitXY"
macht jedoch etwas anderes: Es ändert das Seitenverhältnis des Bildes, was zu Verzerrungen führt. Dies kann manchmal akzeptabel sein, z. B. für ein abstraktes Hintergrundbild.android:adjustViewBounds="true"
undandroid:scaleType="fitXY"
war das, was ich brauchte, um ImageViews in meinem Layout auszurichten. Die Bilder waren um ein oder zwei Pixel (sehr klein auf einem hochauflösenden Display) mit nuradjustViewBounds
. Das Hinzufügen vonscaleType
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.Es 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 Abmessungen übereinstimmt, die im Layout angegeben sind. Deshalb,
android:scaleType
diese Option , um das Bild anzupassen. Zum Beispiel können Sie angebenandroid:scaleType="fitXY"
quelle
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
quelle
Vielleicht kannst du geben
specific height to imageView say 50dp or 40dp
undadjust image to make green border
verschwinden.Z.B:
android:layout_height="40dp"
quelle
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 Framelayout zu füllen, in dem es sich befindet.
Ich verstehe nicht, warum Sie das Rahmenlayout dort überhaupt brauchen. Ohne sie würde Ihr Bild sowieso nur den Bildschirm ausfüllen.
EDIT: Ja, sorry, die XML ist die Höhe für die Bildansicht.
quelle
ImageView
Verwenden Sie dieses Android: scaleType = "fitXY" in imageview xml
quelle
Sie müssen die Bildansicht formen, um ein besseres Erscheinungsbild zu erzielen.
Hier was ich benutzt habe:
quelle