Android ListView-Zeilen in ScrollView werden nicht vollständig angezeigt - abgeschnitten

Beim Einbetten einer ListView in eine ScrollView ist ein Problem aufgetreten. Das ListView-Element ist recht einfach:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_root"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/general_background_list_middle" 
    android:paddingTop="4dp"
    android:paddingBottom="4dp"
    android:paddingRight="0dp"
    android:paddingLeft="0dp">

    <ImageView
        android:id="@+id/chat_friends_avatar"       
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_marginLeft="7dp"
        android:layout_marginRight="8dp"
        android:paddingRight="0dp" 
        android:paddingLeft="0dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/friends_icon_avatar_default"/>

    <TextView
        android:id="@+id/chat_message_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/chat_friends_avatar"
        android:layout_alignParentTop="true"
        android:layout_marginRight="35dp"
        android:maxLines="10"
        android:textSize="12dp"/>

    <TextView
        android:id="@+id/chat_friend_name"
        android:layout_width="140dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="3dp"
        style="@style/SubText"
        android:layout_toRightOf="@id/chat_friends_avatar"      
        android:layout_below="@id/chat_message_text" />

    <TextView
        android:id="@+id/chat_message_time"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        android:layout_marginTop="3dp"
        style="@style/SubText"
        android:layout_alignParentRight="true"
        android:layout_below="@id/chat_message_text" />

</RelativeLayout>   

Wenn ich jedoch eine Liste solcher Elemente in eine ScrollView einbette, werden die Zeilen zwischen einigen anderen Elementen nicht vollständig angezeigt. Sie werden abgeschnitten (siehe Abbildung unten), wenn der Text umbrochen wird. Die ListView wird in der ScrollView wie folgt instanziiert:

<ListView
android:id="@+id/info_chat_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:cacheColorHint="@color/frame_background_color"
android:clickable="false"
android:divider="@null"
android:footerDividersEnabled="false"
android:focusable="false" >
</ListView> 

Wenn die Höhe der ListView auf "wrap_content" eingestellt ist, wird nur das erste Element angezeigt. Deshalb benutze ich eine Methode, um die Höhe der Zeilen der Liste zu berechnen:

private int getCommentsListHeight() {
        if (mChatAdapter != null && mChatAdapter.getCount() != 0) {
            if (mChatList != null) {// && mCommentsListItemHeight == 0) {
                mCommentsListItemHeight = 0;
                for (int i = 0; i < mChatAdapter.getCount(); i++) {
                    // Get view item height
                    View viewItem = mChatAdapter
                            .getView(i, new View(OnAirActivity.this), mChatList);
                    viewItem.measure(0, 0);
                    Logger.d(LOGTAG, "View " + i + " measured height = " + viewItem.getMeasuredHeight());
                    mCommentsListItemHeight += viewItem.getMeasuredHeight();
                }
            }
            //return mChatAdapter.getCount() * mCommentsListItemHeight;
            return mCommentsListItemHeight;
        } else {
            return 0;
        }
    }

Leider ist die von der getMeasuredHeight () -Methode zurückgegebene Höhe des Zeilenelements konstant, wenn der Text in der TextView auch über mehrere Zeilen umbrochen wird. Auch das getLineCount (), das in der TextView innerhalb des Zeilenelements aufgerufen wird, gibt 1 zurück, selbst wenn der Text umbrochen wird.

Wenn diese ListView hingegen in ein LinearLayout eingebettet ist, funktioniert alles einwandfrei und die vollständige Liste wird ohne Übersteuerung angezeigt.

Haben Sie Vorschläge, was hier falsch sein könnte? Ich mag die Idee, die Höhe der Listenelemente manuell zu messen, wirklich nicht und es funktioniert anscheinend nicht, aber warum kann Android die ListView in der ScrollView nicht schön dehnen, um alles dort hinein zu passen?

Ausgeschnittene Liste:

Antworten auf die Frage(9)

Ihre Antwort auf die Frage