Frage

Ich verwende eine Listenansicht in Android 1.5 eine Liste der Bilder und Text zu zeigen, neben das Bild. Ich versuche, den Text vertikal zentriert aber der Text ist an der Spitze der Reihe statt zentriert. Unten ist mein Layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip">

    <ImageView android:id="@+id/item_image" android:layout_width="wrap_content" 
        android:layout_height="wrap_content"  android:paddingRight="10dip" 
        android:src="@drawable/default_image" android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"/>

    <TextView android:id="@+id/item_title" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:layout_toRightOf="@id/item_image" 
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        />

</RelativeLayout>

Es scheint seltsam, dass ich alignParentTop = „true“ zu setzen, wenn ich versuche, den Text vertikal zentriert, aber wenn ich nicht der Text zeigt nicht einmal auf. Was mache ich falsch?

War es hilfreich?

Lösung

EDIT folgende Kommentare:

Es stellt sich heraus, so dass diese Arbeit mit RelativeLayout ist nicht einfach. Am unteren Ende der Antwort, die ich habe eine RelativeLayout enthalten, die die Wirkung gibt wollte, aber nur, bis es in einem Listview enthalten. Danach traten die gleichen Probleme wie in der Frage beschrieben. Dies wurde behoben, indem stattdessen Linearlayout (n) verwendet wird.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:orientation="horizontal">

    <ImageView android:id="@+id/pickImageImage" 
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:background="@drawable/icon"
        android:scaleType="fitXY"
        android:layout_marginRight="10dp"/>

    <TextView android:id="@+id/pickImageText" 
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:gravity="left|center_vertical"
        android:text="I'm the text"/>

</LinearLayout>

Wenn Sie zwei Textfelder haben, können Sie nisten eine zweite orientation="vertical" und Linearlayout nach dem Image und setzen Sie dann die Textfelder in dort.

Dies funktioniert, aber ich muss zugeben, ich weiß nicht, warum die RelativeLayouts nicht. Zum Beispiel dieses Blog-Eintrag von Romain Guy speziell sagt, dass die RelativeLayout sollte. Als ich es versucht, ich habe es nie ganz Arbeit; Zwar tat ich es nicht genau , wie er es tat, aber meine einzige Veränderungen waren mit einigen Attributen der Textviews, die nicht so viel Unterschied gemacht haben sollte.


Hier ist die ursprüngliche Antwort:

Ich glaube, Sie verwechseln Android mit all jenen etwas widersprüchlich Anweisungen in RelativeLayout. Ich umformatiert Ihre Sache so aus:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip">

    <ImageView android:id="@+id/item_image"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:paddingRight="10dip" 
        android:src="@drawable/icon"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"/>

    <TextView android:id="@+id/item_title" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_toRightOf="@id/item_image" 
        android:layout_centerVertical="true"
        android:text="Blah!"/>

</RelativeLayout>

Und das funktioniert gut. Ich entfernte viele Ihrer redundanten android:layout_alignParentxxx, weil sie nicht notwendig waren. Diese Ansicht kommt nun mit dem Bild in der oberen linken Ecke und der Text vertikal zentrierte neben ihn. Wenn Sie das Bild vertikal zentriert als auch wollen, dann können Sie nicht die RelativeLayout auf Android sein: layout_height = „wrap_content“, weil es versucht, sich selbst nicht größer ist als die Höhe des Bildes zu machen. Sie würden eine Höhe angeben, z.B. 80dp, und legen Sie dann die Image zu einer festen Höhe wie 60dp mit Android. Scaletype = „fitXY“, um es richtig zu passen zu machen verkleinern

Andere Tipps

Wurde auf einem ähnlichen Problem für eine Weile stecken, aber fanden diese von CommonsWare:

"Wenn Sie aufblasen das Layout, die Verwendung inflate(R.layout.whatever, parent, false), wo Eltern die Listview ist."

Funktioniert aber nur, wenn Sie die Höhe der Zeile auf einen bestimmten Wert festgelegt (dh Sie nicht wrap_content verwenden können).

Baseline-Richtlinie würde es tun, aber Image einfach nicht Baseline-Ausrichtung von heute unterstützt. Sie können dies umgehen, indem Sie eine Unterklasse von Image erstellen, überschreiben die getBaseline () Methode und gibt die Höhe des Bildes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top