Yuriy Kolbasinskiy
Yuriy Kolbasinskiy

Reputation: 3841

How to automatically set different item height in ExpandableListView?

I'm trying to use ExpandableListView with custom adapter in my project.

There is a result view of my activity with ExpandableListView:

enter image description here

How you can see, some rows doesn't have a right height and some lines are cropped.

What i do wrong?

There are my layout files

activity layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ExpandableListView
        android:layout_width="matc_parent"
        android:layout_height="match_parent"
        android:id="@+id/noticeList"/>

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/empty"
        android:text="@string/empty"/>

</LinearLayout>

and layout for item of ExpandableListView:

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

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/noticeImage"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="20dp"
            android:id="@+id/noticeDate"/>

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:id="@+id/noticeTitle"/>

    </LinearLayout>

</LinearLayout>

Upvotes: 0

Views: 1215

Answers (2)

Yuriy Kolbasinskiy
Yuriy Kolbasinskiy

Reputation: 3841

Thanks all for answers.

The solution is use RelativeLayout instead LinearLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/noticeImage"/>



    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/noticeImage"
        android:id="@+id/noticeDate"
        />

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/noticeTitle"
        android:layout_toRightOf="@+id/noticeImage"
        android:layout_below="@+id/noticeDate"
        />    
</RelativeLayout>

Upvotes: 2

flyingAssistant
flyingAssistant

Reputation: 920

Try to set layout_height for TextView noticeDate to wrap_content

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

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/noticeImage"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/noticeDate"/>

            <TextView
                android:layout_height="match_parent"
                android:layout_width="fill_parent"
                android:id="@+id/noticeTitle"/>

        </LinearLayout>

    </LinearLayout>

Upvotes: 0

Related Questions