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 angepasst