Ich habe ein paar ImageViews in einem LinearLayout. Ich muss die ImageViews verkleinern, damit sie ihre Seitenverhältnisse beibehalten, während sie vertikal in das LinearLayout passen. Horizontal müssen sie nur nebeneinander liegen.
Ich habe dafür einen vereinfachten Prüfstand erstellt, der gewichtete Layouts verschachtelt, sodass ich ein breites, aber nicht sehr großes LinearLayout für die ImageViews habe -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
<LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
<ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
(Im Eclipse-Layout-Editor werden die Bilder vertikal abgeschnitten und überhaupt nicht skaliert - aber das ist nur eine dieser Eigenheiten, die wir lieben lernen.)
Bei Ausführung auf Hardware werden die Bilder auf die richtige Höhe skaliert, wobei das Seitenverhältnis beibehalten wird. Mein Problem ist, dass sie nicht nebeneinander liegen. Die Höhe jeder ImageView entspricht korrekt der Höhe des LinearLayout. Die Breite jeder ImageView entspricht der Breite des nicht skalierten Bildes - der tatsächlich verkleinerten Bilder, die auf der linken Seite ihrer ImageViews angezeigt werden. Aus diesem Grund bekomme ich eine große Lücke zwischen den Bildern.
Idealerweise möchte ich dies über XML verwalten. Wenn dies nicht möglich ist, ist die Verwendung einer benutzerdefinierten Ansicht möglicherweise die beste Lösung.
Ich habe versucht, eine IconView-Klasse (erweitert ImageView) zu erstellen, die onMeasure überschreibt, damit ich Bildansichten mit der erforderlichen Größe erstellen kann, indem ich die Breite abhängig von der Höhe skaliere. Die an die Funktion übergebene parentWidth und parentHeight waren jedoch die Abmessungen des Bildschirms und nicht des LinearLayout-Containers.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
// Calculations followed by calls to setMeasuredDimension, setLayoutParams
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Meine Fragen sind also -
1) Kann ich das XML auf irgendeine Weise ändern, damit es das tut, was ich brauche?
2) Wie kann ich dafür sorgen, dass meine benutzerdefinierte Klasse die Höhe des LinearLayout erhält, damit ich die erforderliche Breite für die benutzerdefinierten Bilder berechnen kann?
Vielen Dank, wenn Sie es geschafft haben, so weit zu lesen. Noch mehr danke, wenn Sie mich in Richtung einer Lösung weisen können!
android:adjustViewBounds="true"
der Höhe zum Bild angepasstandroid::adjustViewBounds
standardmäßig nicht true festgelegt ist. Ich bin froh, dass Ihr Problem jetzt gelöst ist.Antworten:
Was ist mit der Änderung Ihrer ImageViews
android:layout_height="fill_parent"
?Bearbeiten - Ich habe eine Weile gebraucht , um es zu finden, aber das Betrachten der Quelle hat mir geholfen, adjustViewBounds genau zu bestimmen . Möglicherweise möchten Sie versuchen
android:adjustViewBounds="true"
, Ihre ImageViews zu erweitern. Überraschenderweise ist dies standardmäßig false.quelle
Seltsam
android:layout_height="fill_parent"
undandroid:adjustViewBounds="true"
hat nicht geholfen. Das Problem, das ich hatte, war, dass das Bild angezeigt wurde, aber mit der Blockreihe oben und der schwarzen Reihe unten im Bild. Das Einstellen des"centerCrop"
Skalentyps hat mir geholfen. Ich denke, der Grund dafür war, dass meine Bildgröße klein war.quelle
Ich hatte ein ähnliches Problem und meine Lösung bestand darin, das
android:scaleType="fitEnd"
Attribut von ImageView in der XML-Layoutdatei festzulegen.quelle
android:scaleType="fitXY"
+1 an Sie .. :)fitXY
der für mich gearbeitet hat!Ja, meine Lösung dafür war:
android:scaleType="fitXY"
quelle